| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

西工大硬件描述语言实验报告

文***享

贡献于2021-01-01

字数:23543




硬 件 描 述 语 言
实 验 报 告















班级 xxxxxxxx
学号 xxxxxxxx
姓名 xxxxxxxx


目 录
硬 件 描 述 语 言 0
实 验 报 告 0
实验 简单组合逻辑设计 2
实验二 简单分频时序逻辑电路设计 4
实验三 利条件语句实现计数分频时序电路 7
实验四 阻塞赋值非阻塞赋值区 12
实验五 always块实现较复杂组合逻辑电路 16
实验六 Verilog中函数 21
实验七 Verilog HDL中务(task) 25
实验八 利限状态机进行时序逻辑设计 32
实验九 利状态机实现较复杂接口设计 36
实验十 利SRAM设计FIFO 46

实验 简单组合逻辑设计

实验目
1掌握基组合逻辑电路实现方法
2初步解两种基组合逻辑电路生成方法
3学测试模块编写
4通综合布局布线解层次仿真物理意义

二 实验容
次实验采Verilog HDL语言设计综合数较器功较数a数b结果果两数相输出结果1否出结果0写出测试模型进行较全面测试

三 实验步骤
1建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试进行仿真
3观察综合生成文件源文件点相点
4综合时采FPGA器件观察综合结果什

四 实验代码
1模块源码
module compare(equal a b)
input ab
output equal
assign equal (a b)10
endmodule

2测试代码
`timescale 1ns1ns

module compare_t
reg a b
wire equal
initial
begin
a0
b0
#100 a0 b1
#100 a1 b1
#100 a1 b0
#100 a0 b0
#100 stop
end
compare m(equal(equal)a(a)b(b))
endmodule

五 综合仿真
RTL图仿真波形图:



六 思考题
1课练测试方法二中第二initial块什?第initial块什关系?

测试方法二中第二initial暂停仿真便观察仿真波形第initial行关系

2果第二initial块中没写出#10000者stop仿真会进行?

果没写#10000仿真会直接停止没stop仿真会结束

3较两种测试方法种更全面?

第二种测试方法更全面测试更种变换情况




实验二 简单分频时序逻辑电路设计

实验目
1掌握条件语句简单时序模块设计中
2掌握verilog语句简单时序模块设计中
3学Verilog模块中应计数器
4学测试模块编写综合层次仿真

二 实验容
1always块@(posedge clk)@(negedge clk)结构表述时序逻辑设计12分频综合模型波形图:

2模块进行RTL级仿真综合门级仿真布局布线仿真

三 实验步骤
1建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试综合仿真波形图
3观察综合生成文件源文件点相点
4记录数完成实验报告

四 实验代码
1 模块代码
module half_clk(resetclk_inclk_out)
input clk_inreset
output clk_out
reg clk_out
always @(posedge clk_in)
begin
if(reset)
clk_out0
else
clk_out~clk_out
end
endmodule

2测试代码
`timescale 1ns100ps
`define clk_cycle 50
module top
reg clkreset
wire clk_out
always #`clk_cycle clk~clk
initial
begin
clk0
reset1
#10 reset0
#110 reset1
#100000 stop
end
half_clk m0(reset(reset)clk_in(clk)clk_out(clk_out))
endmodule

五 综合仿真
RTL图仿真波形图



六 思考题
1果没reset信号否控制2分频clk_out信号相位?

果没reset信号法控制2分频clk_out信号相位

2 clk时钟触发(2分频产生时钟)直接产生4分频
8分频者16分频时钟?

助整型变量j做计数操作

3clk时钟触发直接产生占空分频时钟?

助整型变量j做计数操作clk时钟触发直接产生4分频8分频者16分频时钟产生占空分频时钟




实验三 利条件语句实现计数分频时序电路

实验目
1掌握条件语句简单时序模块设计中
2掌握基时序电路实现方法
3学Verilog模块中应计数器
4学测试模块编写综合层次仿真

二 实验容
1复课熟悉条件语句方式
2建立工程编写源代码
3综合布局布线仿真分析always语句时序逻辑中作
4学测试模块编写综合仿真

三 实验步骤
1建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试综合仿真
3观察综合生成文件源文件点相点
4综合时采FPGA器件Altera公司Cyclone II系列Stratix III系列观察综合结果什

四 实验代码
1模块代码
module fdivision(RESETF10MF500K)
input F10MRESET
output F500K
reg F500K
reg [70]j
always @(posedge F10M)
if(RESET) 低电复位
begin
F500K < 0
j < 0
end
else
begin
if(j19) 计数器进行判断确定F500K信号否反转
begin
j < 0
F500K < ~F500K
end
else
j < j+1
end
endmodule

2测试代码
`timescale 1ns100ps
`define clk_cycle 50
module division_top
reg F10MRESET
wire F500K_clk
always #`clk_cycle F10M~F10M
initial
begin
RESET1
F10M0
#100 RESET0
#100 RESET1
#10000 stop
end
fdivision fdivision(RESET(RESET)F10M(F10M)F500K(F500K_clk))
endmodule

五 综合仿真
RTL图仿真波形图:



六 思考题
1考虑实现意数值分频

意分频代码:
module divn(clkrst_no_clk)
input clkrst_n
output o_clk
parameter WIDTH 3
parameter N 5

reg [WIDTH10] cnt_pcnt_n   count_posecount_nege
reg clk_pclk_n

assign o_clk (N1) clk (N[0])(clk_p&clk_n) clk_p 
果N1o_clkclk 果N偶数o_clkclk_p 果N奇数o_clkclk_p & clk_n
相运算clk_pclk_n两者高电低电clk两者相 差半clk相结果o_clk占空50

always @ (posedge clk or negedge rst_n)
begin
if(rst_n)
cnt_p<0
else if (cnt_p(N1))
cnt_p<0
else
cnt_pend

always @ (posedge clk or negedge rst_n)
begin 
if(rst_n)
clk_p<0
else if (cnt_p<(N>>1)) 
clk_p<0
else
clk_p<1
end

always @ (negedge clk or negedge rst_n)
begin
if(rst_n)
cnt_n<0
else if (cnt_n(N1))
cnt_n<0
else
cnt_nend

always @ (negedge clk or negedge rst_n)
begin 
if(rst_n)
clk_n<0
else if (cnt_n<(N>>1))
clk_n<0
else
clk_n<1
end  

endmodule

3 果综合时采FPGA器件Altera公司Cyclone II系列Stratix III系列想想综合结果什?

时钟分频实现方法果采行波时钟方式(异步设计)容易造成时钟偏差难控制芯片部逻辑基单元中触发器建立保持时间时芯片部参数代码时序分析结果分析正常
果分频时钟作级设计工作时钟整设计时钟时钟实现话(异步设计)存信号跨时钟域转换问题跨时钟域信号果设计会采亚稳态

3课试着利10MB时钟设计单周期形状周期波形

模块代码:
module zhouqiwave(resetF10Ma)
input resetF10M
output a
reg a
reg [150]b
always@(reset or posedge F10M)
if(reset)
begin
a<0
b<0
end
else
begin
if(b199)
begin
a<~a
bend
else
begin
if(b299)
begin
a<~a
bend
if(b499)
begin
a<0
bend
else
bend
end
endmodule
测试代码:
`timescale 10ns10ns

module zhouqiwave_tb
reg F10Mreset
wire a
always #5 F10M~F10M

initial
begin
reset0
F10M0
#5 reset1
#6000 stop
end
zhouqiwave m(reset(reset)F10M(F10M)a(a))
endmodule




实验四 阻塞赋值非阻塞赋值区

实验目
1通实验掌握阻塞赋值非阻塞赋值概念区
2深入理解序执行发执行概念
3解非阻塞阻塞赋值场合
4学测试模块编写综合层次仿真

二 实验容
1次实验参课练三采Verilog HDL语言描述两模块分包含阻塞非阻塞赋值语句
2编写测试模块相输入信号条件较阻塞非阻塞语句输出结果
3模块进行RTL级仿真综合门级仿真布局布线仿真
4分析阻塞赋值非阻塞赋值区

三 实验步骤
1仔细阅读课建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试综合仿真
3观察综合生成两电路结构图观察仿真波形图分析阻塞非阻塞赋值异
4综合时采FPGA器件Altera公司Cyclone II系列Stratix III系列观察综合结果什

四 实验代码
模块代码:
a) 采阻塞赋值
module blocking(clkabc)
output [30] bc
input [30] a
input clk
reg [30] bc
always @(posedge clk)
begin
b a
c b
display(Blocking a d b d c dabc)
end
endmodule
b) 采非阻塞赋值
module non_blocking(clkabc)
output [30] bc
input [30] a
input clk
reg [30] bc
always @(posedge clk)
begin
b < a
c < b
display(Non_Blocking a d b d c dabc)
end
endmodule

测试代码:
`timescale 1ns100ps
`includeblockingv
`includenon_blockingv
module compareTop
wire [30] b1c1b2c2
reg [30] a
reg clk
initial
begin
clk0
forever #50 clk~clk
end

initial
begin
a4'h3
display(____________)
# 100 a4'h7
display(____________)
# 100 a4'hf
display(____________)
# 100 a4'ha
display(____________)
# 100 a4'h2
display(____________)
# 100 display(____________)
stop
End

non_blocking non_blocking(clkab2c2)
blocking blocking(clkab1c1)
endmodule

五 综合仿真



六 思考题
1解释说明测试模块中forever语句语句否够执行?什?

forever循环语句常产生周期性波形作仿真测试信号always处独立写程序中必须写initial块中

2blocking模块中两种方法仿真综合结果会什样变化?作出仿真波形分析综合结果
a)
always@(posedge clk)
begin
cb
ba
end
实现面非阻塞赋值相赋值结果

b)
always@(posedge clk)ba
always@(posedge clk)cb
出现竞争现象




实验五 always块实现较复杂组合逻辑电路

实验目
1掌握always实现较组合逻辑电路方法
2进步解assignalways两种组合电路实现方法区注意点
3学测试模块中机数产生应
4学综合层次仿真较结果

二 实验容
1运always语句块设计8位数选择器求:路输入数输出数均4位2进制数选择开关(少3位)输入数发生变化时输出数相应变化
2写出测试模块模块功进行测试
3模块进行RTL级仿真综合门级仿真布局布线仿真

三 实验步骤
1仔细阅读课建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试综合仿真
3观察综合生成两电路结构图观察仿真波形图分析assignalways两种组合电路实现方法区注意点
4综合时采FPGA器件Altera公司Cyclone II系列Stratix III系列观察综合结果什

四 实验代码
1模块代码:
`define plus    3'd0
`define minus  3'd1
`define band    3'd2
`define bor    3'd3
`define unegate 3'd4

通指令判断输入数执行相应操作包括加减求反
指令作数指令身发生变化结果作出时反应
module  alu(outopcodeab)
output[70] out
reg[70]    out
input[20] opcode
input[70] ab              操作数

always@(opcode or a or b)    电敏感always块
begin
case(opcode)
`plus  out a+b    加操作
`minus out ab  减操作
`band  out a&b    求
`bor   out a|b   求          
`unegate  out~a 求 反
default  out8'hx 未收指令时输出意态
endcase
end
endmodule   

2测试代码:
`timescale 1ns1ns
`include  aluv
module    alutest
wire[70] out
reg[70]  ab
reg[20]  opcode
parameter  times5
initial
begin      
a{random}256  Give a radom number blongs to [0255]
b{random}256  Give a radom number blongs to [0255]
opcode3'h0
repeat(times)
begin
#100    a{random}256  Give a radom number
  b{random}256  Give a radom number
  opcodeopcode+1
 end          
 #100  stop        
   end       
alu    alu1(outopcodeab)
endmodule

五 综合仿真



六 思考题
1分析assign语句always语句进行组合逻辑设计时什异点?

verilog语言中赋值语句两种种持续赋值语句(assign语句)种程赋值语句(always语句)
持续赋值语句(assign语句)wire型变量赋值wire值存住需直值需持续赋值
程赋值语句(always语句)reg 型变量赋值always语句执行需满足触发条件always程块里面容时刻执行需赋值象定义成寄存器类型便值保持住程赋值分阻塞赋值非阻塞赋值<两种

2always块设计八功算术运算单元输入信号ab均4位功选择select3位输出信号out(5位)算术运算单元执行操作select信号关具体关系表列(忽略输出结果中溢溢位):
Select信号
函数输出
3’b000
a
3’b001
a+b
3’b010
ab
3’b011
ab
3’b100
ab(余数)
3’b101
a<<1
3’b110
a>>1
3’b111
(a>b)(副值较)
模块代码:
`define original 3'd0
`define plus 3'd1
`define minus 3'd2
`define division 3'd3
`define remainder 3'd4
`define leftmov 3'd5
`define rightmov 3'd6
`define compare 3'd7

module mathunit(outselectab)
output [40]out
reg [40] out
input [20] select
input [30] ab

always@(select or a or b)
begin
case(select)
` original out a
`plus out a+b
`minus out ab
`division out ab
`remainder out ab
`leftmov out a<<1
`rightmov out a>>1
`compare out a>bab
default out 4’bx
endcase
end
endmodule




实验六 Verilog中函数

实验目
1解函数定义模块设计中
2解函数综合性问题
3解许综合器综合复杂算术运算

二 实验容
1次实验Verilog HDL语言函数调简单示范
2实验采步时钟触发运算执行clk时钟周期会执行次运算
3测试模块中通调系统务display时钟降显示计算结果

三 实验步骤
1建立工程文件
2参资料编写源文件tryfunctv测试模块tryfuctTopv
3测试模块tryfuctTop中调系统务display时钟降显示计算结果系统务display示例:
@(negedge clk)
display( time nd resultd n result )
调函数仿真tryfuctTop模块波形

四 实验代码
1模块代码:
module tryfunct(clkresultreset)
output[310] result
input resetclk
reg[310] result
always @(posedge clk) clk触发步运算
begin
if(reset) reset低时复位
result<0
else
begin
result < factorial(3)
end
end
function [310] factorial 函数定义
input [30] operand
reg [30] index
begin
factorial operand 1 0
for(index 2 index < operand index index + 1)
factorial index * factorial
end
endfunction
endmodule

2测试代码:
`include tryfunctv
`timescale 1ns100ps
`define clk_cycle 50

module tryfuctTop
reg[30] ni
reg resetclk
wire[310]result
initial
begin
clk0
n0
reset1
# 100 reset0
# 100 reset1
for(i0i<15ii+1)
begin
#200 ni
end
#100 stop
end
always #`clk_cycle clk~clk
tryfunct m(clk(clk)n(n)result(result)reset(reset))
endmodule

五 综合仿真



六 思考题
1设计带控制端逻辑运算电路分完成整数方立方数5阶运算求综合编写测试模块出种层次仿真波形较

模块代码:
module myfunction(clknresultresetsl)
output[60] result
input[20] n
input resetclk
input [10] sl
reg[60] resultdefine input and output
always @(posedge clk)
begin
if(reset)
result<0
else
begin
case(sl)
2'd0 result2'd1 result2'd2 resultendcase
end
end
function[60] square
input [20] operand
begin
squareoperand*operand
end
endfunction
function[60] cubic
input [20] operand
begin
cubicoperand*operand*operand
end
endfunction
function[60] factorial
input [20] operand
reg [20] index
begin
factorial 1
for(index 2 index < operand index index + 1)
factorial index * factorial
end
endfunction
endmodule
测试代码:
`include myfunctionv
`timescale 1ns100ps
`define clk_cycle 50
module testmyfunc
reg[20] n
reg resetclk
reg[10] sl
wire[60] result
parameter times20
initial
begin
n0
reset1
clk0
sl0
#100 reset0
#100 reset1
repeat(times)
begin
#50 sl{random}3
#50 n{random}6
end
#1000 stop
end
always #`clk_cycle clk~clk
myfunction myfunct(clk(clk)n(n)result(result)reset(reset)sl(sl))
endmodule




实验七 Verilog HDL中务(task)

实验目
1掌握务Verilog模块设计中应
2学会电敏感列表always中拼接操作务阻塞赋值等语句生成复杂组合逻辑高级方法

二 实验容
利电敏感always模块较两变量排序务设计出4(4位)行输入数高速排序组合逻辑

三 实验步骤
1建立工程文件编写模块源码测试模块求测试模块源文件进行较全面测试
2编译源码测试模块测试模块源文件进行测试综合仿真
3观察务仿真波形分析task带处
4综合时采FPGA器件Altera公司Cyclone II系列Stratix III系列观察综合结果什

四 实验代码
1模块代码:
module sort4(rarbrcrdabcd)
output[30] rarbrcrd
input[30] abcd
reg[30] rarbrcrd
reg[30] vavbvcvd
always @ (a or b or c or d)
begin
{vavbvcvd}{abcd}
sort2(vavc) va vc
sort2(vbvd) vb vd
sort2(vavb) va vb
sort2(vcvd) vc vd
sort2(vbvc) vb vc
{rarbrcrd}{vavbvcvd}
end
task sort2
inout[30] xy
reg[30] tmp
if(x>y)
begin
tmpx
xy
ytmp
end
endtask
endmodule

2测试代码:
`timescale 1ns100ps
`include sort4v
module task_Top
reg[30] abcd
wire[30] rarbrcrd
initial
begin
a0b0c0d0
repeat(5)
begin
#100 a {random}15
b {random}15
c {random}15
d {random}15
end
#100 stop
end
sort4 sort4 (a(a)b(b)c(c)d(d)ra(ra)rb(rb)rc(rc)rd(rd))
endmodule

五 综合仿真



六 思考题
两种方法设计功相模块该模块够完成四8位二进制输入数泡排序求:
a) 第种方法模仿面例子纯组合逻辑实现
b) 第二种假设8位数时钟节拍串行输入求时钟触发务执行法时钟周期完成次数交换操作
c) 较两种方法运行速度消耗资源

方法:
模块代码:
module bub(aibicidiaobocodo)
input[70] aibicidi
output[70] aobocodo
reg[70] aobocodo
reg[70] arbrcrdr
reg[30] n
parameter so4

always @(ai or bi or ci or di)
begin
{arbrcrdr}{aibicidi}
for(nson>1nn1)
bb(arbrcrdrn)
{aobocodo}{arbrcrdr}
end

task bb
inout[70] x1x2x3x4
input[30] n
reg[70] temp
reg[30] s
if(n>0)
for(s1sbegin
case(s)
1sort2(x1x2)
2sort2(x2x3)
3sort2(x3x4)
endcase
end
endtask

task sort2
inout[70] xy
reg[70] temp
if(x>y)
begin
tempx
xy
ytemp
end
endtask
endmodule
测试代码:
`timescale 1ns100ps

module buubTEST
reg[70] aibicidi
wire[70] aobocodo

initial
begin
ai0bi0ci0di0
repeat(4)
begin
#100 ai{random}256
bi{random}256
ci{random}256
di{random}256
end
#100 stop
end

bub m0(aibicidiaobocodo)
endmodule
方法二(时序逻辑):
模块代码:
module bub_1(inclkarbrcrdraobocodo)
input[70] in
imput clk
output[70] arbrcrdr
reg[70] aobocodo
reg[70] arbrcrdr
reg[30] nsq
parameter so4

initial
begin
n0s0q0
end

always @(posedge clk)
begin
if(nbegin
nn+1
arbrcrdrend
if(nso+1)
begin
nsq<1
end
if(s>1)
begin
{aobocodo}<{arbrcrdr}
if(qbegin
case(q)
1sort2(arbr)
2sort2(brcr)
3sort2(crdr)
endcase
qend
else
begin
sq<1
end
end
end endalways

task sort2
inout[70] xy
reg[70] temp
if(x>y)
begin
tempx
xy
ytemp
end
endtask
endmodule
测试代码:
`timescale 1ns100ps

module bubTEST_1
reg[70] in
reg clk
wire[70] aobocodoarbrcrdr

initial
begin
clk0
in0
begin
repeat(4)
#100 in{random}256
end
#100 stop
end

always #50 clk~clk
bub_1 m0(inclkarbrcrdraobocodo)
endmodule




实验八 利限状态机进行时序逻辑设计

实验目
1掌握利限状态机实现般时序逻辑分析方法
2掌握Verilog编写综合限状态机标准模板
3掌握Verilog编写状态机模块测试文件般方法

二 实验容
1阅读书例子熟悉状态机设计流程设计思路
2设计串行数检测器求:连续441时输出1输入情况0
3建立工程编写源代码测试模块
4布局布线级仿真

三 实验步骤
1建立工程编写模块源码
2编写测试模块思考模块实现逐位左移循环进入状态机测试
3布局布线仿真结合出状态转化图理解状态机工作原理
4记录数完成实验报告

四 实验代码
1模块代码:
module seqdet(xzclkrststate)
input xclkrst
output z
output[20] state
reg[20] state
wire z
parameter IDLE'd0 A'd1 B'd2C'd3 D'd4E'd5 F'd6G'd7
assign z ( stateE && x0 ) 1 0

always @(posedge clk)
if(rst)
state < IDLE
else
casex(state)
IDLE if(x1)
state < A
A if(x0)
state < B
B if(x0)
state < C
else
state < F
C if(x1)
state < D
else
state < G
D if(x0)
state < E
else
state < A
E if(x0)
state < C
else
state < A
F if(x1)
state < A
else
state < B
G if(x1)
state < F
defaultstateIDLE
endcase
endmodule

2测试代码:
`timescale 1ns1ns
`include seqdetv
module seqdet_Top
reg clkrst
reg[230] data
wire[20] state
wire zx
assign xdata[23]
always #10 clk ~clk
always @(posedge clk)
data{data[220]data[23]}
initial
begin
clk0
rst1
#2 rst0
#30 rst1
data 'b1100_1001_0000_1001_0100
#500 stop
end
seqdet m(xzclkrststate)
endmodule

五 综合仿真



六 思考题
1什源文件中状态转化非阻塞赋值语句?果换成阻塞赋值语句?什?

时序块 RTL 代码中非阻塞赋值
非阻塞赋值块结束完成赋值操作赋值方式避免仿真出现险竞争现象
组合 RTL 代码中阻塞赋值
阻塞方式变量进行赋值时变量值赋值语句执行完立改变
非阻塞赋值方式进行赋值时赋值语句步执行通常时钟时变量进行赋值时钟进行采样




实验九 利状态机实现较复杂接口设计

实验目
1学运状态机控制逻辑开关设计出较复杂接口逻辑
2复杂设计中务(task)结构提高程序读性
3加深综合风格模块认识

二 实验容
利状态机实现较复杂接口设计

三 实验步骤
1建立工程编写模块源码
2编写测试模块思考状态机实现复杂接口设计
3布局布线仿真
4记录数完成实验报告

四 实验代码
1模块代码:
module writing(resetclkaddressdatasdaack)
input reset clk
input[70] data address
inout sda sdaack
output ack
reg link_write link_write
reg[30] state
reg[40] sh8out_state
reg[70] sh8out_buf
reg finish_F
reg ack
parameter idle0addr_write1data_write2stop_ack3
parameter bit01bit12bit23bit34bit45bit56bit67bit78

assign sdalink_write sh8out_buf[7] 1'bz

always @(posedge clk)
begin
if(reset)
begin
link_write <0
state finish_F <0
sh8out_state ack <0
sh8out_buf <0
end
else
case(state)
idle
begin
link_write <0
finish_F <0
sh8out_stateack <0
sh8out_buf
state end
addr_write
begin
if(finish_F0)
begin
shift8_out
end
else
begin
sh8out_state < idle
sh8out_buf < data
statefinish_F<0
end
end
data_write
begin
if(finish_F0)
shift8_out
else
begin
link_write<0
state< stop_ack
finish_F<0
ack<1
end
end
stop_ack
begin
ack<0
stateend
endcase
end

task shift8_out
begin
case(sh8out_state)
idle
begin
link_write<1
sh8out_stateend
bit7
begin
link_write<1
sh8out_statesh8out_bufend
bit6
begin
sh8out_statesh8out_bufend
bit5
begin
sh8out_statesh8out_bufend
bit4
begin
sh8out_statesh8out_bufend
bit3
begin
sh8out_statesh8out_bufend
bit2
begin
sh8out_statesh8out_bufend
bit1
begin
sh8out_statesh8out_bufend
bit0
begin
link_write<0
finish_F<1
end
endcase
end
endtask
endmodule

2测试代码:
`timescale 1ns100ps
`define clk_cycle 50

module writingTop
reg resetclk
reg[70]dataaddress
wire acksda

always #`clk_cycle clk ~clk

initial
begin
clk0
reset1
data0
address0
#(2*`clk_cycle) reset0
#(2*`clk_cycle) reset1
#(100*`clk_cycle) stop
end

always@(posedge ack)
begin
datadata+1
addressaddress+1
end

writing writing(reset(reset)clk(clk)data(data)address(address)ack(ack)sda(sda))
endmodule

五 思考题
1彻底搞清楚例参考第二部分第16章实际例子独立编写实现EEPROM全部读写功行转换IIC串行总线读写信号模块编写完整符合工程求测试模块进行种层次仿真观察波形

`timescale 1ns1ns
module EEPROM_WR(SDASCLACKRESETCLKWRRDADDRDATA)
output SCL 串行时钟线
output ACK 读写周期应答信号
input RESET 复位信号
input CLK 时钟信号输入
input WRRD 读写信号
input[100] ADDR 址线
inout SDA 串行数线
inout[70] DATA 行数线
reg ACK
reg SCL
reg WFRF 读写操作标志
reg FF 标志寄存器
reg [10] head_buf 启动信号寄存器
reg[10] stop_buf 停止信号寄存器
reg [70] sh8out_buf EEPROM写寄存器
reg [80] sh8out_state EEPROM 写状态寄存器
reg [90] sh8in_state EEPROM 读状态寄存器
reg [20] head_state 启动状态寄存器
reg [20] stop_state 停止状态寄存器
reg [100] main_state 状态寄存器
reg [70] data_from_rm EEPROM读寄存器
reg link_sda SDA 数输入EEPROM开关
reg link_read EEPROM读操作开关
reg link_head 启动信号开关
reg link_write EEPROM写操作开关
reg link_stop 停止信号开关
wire sda1sda2sda3sda4

串行数开关控制次序输出输入
assign sda1 (link_head) head_buf[1] 1'b0
assign sda2 (link_write) sh8out_buf[7] 1'b0
assign sda3 (link_stop) stop_buf[1] 1'b0
assign sda4 (sda1 | sda2 | sda3)
assign SDA (link_sda) sda4 1'bz
assign DATA (link_read) data_from_rm 8'hzz

状态机状态定义
parameter
Idle 11'b00000000001
Ready 11'b00000000010
Write_start 11'b00000000100
Ctrl_write 11'b00000001000
Addr_write 11'b00000010000
Data_write 11'b00000100000
Read_start 11'b00001000000
Ctrl_read 11'b00010000000
Data_read 11'b00100000000
Stop 11'b01000000000
Ackn 11'b10000000000

行数串行输出状态
sh8out_bit7 9'b000000001
sh8out_bit6 9'b000000010
sh8out_bit5 9'b000000100
sh8out_bit4 9'b000001000
sh8out_bit3 9'b000010000
sh8out_bit2 9'b000100000
sh8out_bit1 9'b001000000
sh8out_bit0 9'b010000000
sh8out_end 9'b100000000
串行数行输出状态
Parameter
sh8in_begin 10'b0000000001
sh8in_bit7 10'b0000000010
sh8in_bit6 10'b0000000100
sh8in_bit5 10'b0000001000
sh8in_bit4 10'b0000010000
sh8in_bit3 10'b0000100000
sh8in_bit2 10'b0001000000
sh8in_bit1 10'b0010000000
sh8in_bit0 10'b0100000000
sh8in_end 10'b1000000000
启动状态
head_begin 3'b001
head_bit 3'b010
head_end 3'b100
停止状态
stop_begin 3'b001
stop_bit 3'b010
stop_end 3'b100

parameter YES 1
NO 0

产生串行时钟scl输入时钟二分频
always @(negedge CLK)
if(RESET)
SCL < 0
else
SCL < ~SCL

状态机程序
always @ (posedge CLK)
if(RESET)
begin
link_read < NO
link_write < NO
link_head < NO
link_stop < NO
link_sda < NO
ACK < 0
RF < 0
WF < 0
FF < 0
main_state < Idle
end
else
begin
casex(main_state)
Idle
begin
link_read < NO
link_write < NO
link_head < NO
link_stop < NO
link_sda < NO
if(WR)
begin
WF < 1
main_state < Ready
end
else if(RD)
begin
RF < 1
main_state < Ready
end
else
begin
WF < 0
RF < 0
main_state < Idle
end
end
Ready
begin
link_read < NO
link_write < NO
link_stop < NO
link_head < YES
link_sda < YES
head_buf[10] < 2'b10
stop_buf[10] < 2'b01
head_state < head_begin
FF < 0
ACK < 0
main_state < Write_start
end
Write_start
if(FF 0)
shift_head
else
begin
sh8out_buf[70] < {1'b11'b01'b11'b0ADDR[108]1'b0}
link_head < NO
link_write < YES
FF < 0
sh8out_state < sh8out_bit6
main_state < Ctrl_write
end
Ctrl_write
if(FF 0)
shift8_out
else
begin
sh8out_state < sh8out_bit7
sh8out_buf[70] < ADDR[70]
FF < 0
main_state < Addr_write
end
Addr_write
if(FF 0)
shift8_out
else
begin
FF < 0
if(WF)
begin
sh8out_state < sh8out_bit7
sh8out_buf[70] < DATA
main_state < Data_write
end
if(RF)
begin
head_buf < 2'b10
head_state < head_begin
main_state < Read_start
end
end
Data_write
if(FF 0)
shift8_out
else
begin
stop_state < stop_begin
main_state < Stop
link_write < NO
FF < 0
end
Read_start
if(FF 0)
shift_head
else
begin
sh8out_buf< {1'b11'b01'b11'b0ADDR[108]1'b1}
link_head < NO
link_sda < YES
link_write < YES
FF < 0
sh8out_state < sh8out_bit6
main_state < Ctrl_read
end
Ctrl_read
if(FF 0)
shift8_out
else
begin
link_sda < NO
link_write < NO
FF < 0
sh8in_state < sh8in_begin
main_state < Data_read
end
Data_read
if(FF 0)
shift8in
else
begin
link_stop < YES
link_sda < YES
stop_state < stop_bit
FF < 0
main_state < Stop
end
Stop
if(FF 0)
shift_stop
else
begin
ACK < 1
FF < 0
main_state < Ackn
end
Ackn
begin
ACK < 0
WF < 0
RF < 0
main_state < Idle
end
default main_state < Idle
endcase
end
endmodule




实验十 利SRAM设计FIFO

实验目
1学掌握存取队列理状态机设计基方法
2解掌握存储器构成FIFO接口设计基技术
3工程概念编写完整测试模块达完整测试覆盖

二 实验容
利SRAM模型设计SRAM读写控制逻辑SRAM行户表现FIFO(先进先出存储器)

三 实验步骤


四 实验代码
`define FIFO_SIZE 8
`include sramv 仿真工具需加句 sramv模块编译
`timescale 1ns1ns

module t
reg [70] in_data FIFO数总线
reg fifordfifowr FIFO控制信号
wire[70] out_data
wire nfull nempty FIFO状态信号
reg clkrst
wire[70] sram_data SRAM数总线
wire[100] address SRAM址总线
wire rdwr SRAM读写控制信号

reg [70] data_buf[`FIFO_SIZE0] 数缓存结果检查
integer index 读写data_buf指针

系统时钟
initial clk0
always #25 clk~clk

测试激励序列
initial
begin
fiford1
fifowr1
rst1
#40 rst0
#42 rst1
if (nempty) display(timeError FIFO be empty nempty should be low\n)
连续写FIFO
index 0
repeat(`FIFO_SIZE)
begin
data_buf[index]random
write_fifo(data_buf[index])
index index + 1
end
if (nfull)
display(timeError FIFO full nfull should be low\n)
repeat(2) write_fifo(random)
#200
连续读FIFO
index0
read_fifo_compare(data_buf[index])
if (~nfull)
display(timeError FIFO not full nfull should be high\n)
repeat(`FIFO_SIZE1)
begin
index index + 1
read_fifo_compare(data_buf[index])
end
if (nempty)
display(timeError FIFO be empty nempty should be low\n)
repeat(2) read_fifo_compare(8'bx)
reset_fifo
写读FIFO
repeat(`FIFO_SIZE*2)
begin
data_buf[0] random
write_fifo(data_buf[0])
read_fifo_compare(data_buf[0])
end
异常操作
reset_fifo
read_fifo_compare(8'bx)
write_fifo(data_buf[0])
read_fifo_compare(data_buf[0])
stop
end

fifo_interface fifo_mk (in_data(in_data)
out_data(out_data)
fiford(fiford)
fifowr(fifowr)
nfull(nfull)
nempty(nempty)
address(address)
sram_data(sram_data)
rd (rd)wr(wr)
clk(clk)rst(rst) )

sram m1 ( Address (address)
Data (sram_data)
SRG (rd) SRAM读
SRE (1'b0) SRAM片选低效
SRW (wr) ) SRAM写

task write_fifo
input [70] data
begin
in_datadata
#50 fifowr0 SRAM中写数
#200 fifowr1
#50
end
endtask

task read_fifo_compare
input [70] data
begin
#50 fiford0 SRAM中读数
#200 fiford1
if (out_data data)
display(timeError Data retrieved (h) not match the one stored (h) \n
out_data data)
#50
end
endtask

task reset_fifo
begin
#40 rst0
#40 rst1
end
endtask
endmodule
余代码参见实验指导


文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

c语言实验报告

c语言实验报告  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验一  上机操作初步和简单的C程序设计  一、 实验目的  1、熟悉C语言运行环境Turbo C++3.0  2、会简单的程序调试  3、熟悉C语言

极***速 11年前 上传846   0

C语言实验报告《指针》

C语言实验报告《指针》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验五  指针  一、 实验目的  1、掌握指针的概念、会定义和使用指针变量  2、掌握指向数组的指针变量  3、掌握字符串指针的使用  

D***1 11年前 上传1010   0

C语言实验报告《数组》

C语言实验报告《数组》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验三  数组  一、 实验目的  1、掌握一维和二维数组的定义、赋值和输入输出  2、掌握字符数组和字符串数组的使用  3、掌握与数组有关的排

我***海 11年前 上传921   0

电子硬件工程师工作职责描述

电子硬件工程师工作职责描述1、负责设计嵌入式硬件平台开发(主要为RK、MTK平台平板电脑设计与开发),并进行调试;2、负责方案和元器件选型、PCB设计评审、硬件可靠性评估,包括时序、纹波噪声、信号质量等测试;3、负责整机组件参数定义和选型、配合结构做整机产品的布局和堆叠等工作;4、负责向本部门以及其他技术部门和客户提供技术交流和指导;5、根据公司技术文档要求编写相应技术文档;电子硬件

z***a 2年前 上传501   0

C语言实验报告《函数》

C语言实验报告《函数》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验四  函数  一、 实验目的  1、掌握函数定义、调用和声明的方法  2、掌握实参和形参之间的传递方式  3、函数的嵌套调用  二、 实

t***g 12年前 上传1421   0

《高级语言程序设计》实验报告

1.掌握在Visual C++6.0环境下C程序的建立、编辑、编译和执行过程。2.掌握C程序的最基本框架结构,完成简单程序的编制与运行。3.了解基本输入输出函数scanf()、printf ()的格式及使用方法。4.掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。

w***2 2年前 上传518   0

C语言程序设计实验报告

C语言程序设计实验报告  实验名称 计算出1000以内10个最大素数之和   实验目的   1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。  2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循

大***6 11年前 上传1011   0

《高级语言程序设计》实验报告

设计一种用单链表存储多项式的结构(每个结点存储一项的系数和指数,类型都为int)并编写一个产生多项式链表的函数和一个实现两个多项式相加和相乘的函数。

留***1 6年前 上传3570   0

C语言实验报告《综合实验》

C语言实验报告《综合实验》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验六  综合实验  一、 实验目的  1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。  2、掌握C程序的结构化程序设计方法,能

q***u 10年前 上传897   0

硬件测试工程师岗位的主要职责描述

硬件测试工程师岗位的主要职责描述职责:1.负责360IOT业务线家庭智能安防产品的硬件固件测试,负责从试产到量产导入的品质保证工作;2.根据项目需求、硬件规格书以及相关测试标准,设计测试标准以及测试计划、编写测试用例、执行测试,保证测试质量,并总结设备通用测试用例。3.负责对硬件质量问题进行跟踪分析和报告,推动测试中发现的问题及时合理地解决,向研发部门提供产品技术以及体验性能改进方面的建

s***7 2年前 上传476   0

西工大社会实践报告

西工大社会实践报告  【引言】20xx年7月13日,由西北工业大学材料学院和理学院组成的广州行社会实践队从西安出发赴有“羊城”美誉之称的广州来到几家知名企业进行零距离接触。在出发之前,我们广州行社会实践队进行了严密的分工,做好了大量的前期工作,包括人员的选拔、学校内充分的宣传等。紧紧围绕 “青春筑梦”的主题,在两位老师的带领下,我们在为期一星期的暑假社会实践过程中走访了广州宝洁、本田、丰田、

葭***弦 10年前 上传359   0

2021年c语言实验报告分析总结

 2021年c语言实验报告分析总结撰写人:___________日 期:___________2021年c语言实验报告分析总结在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这

k***8 3年前 上传587   0

“提高学生英语言语技能”研究课题实验报告

“提高学生英语言语技能”研究课题实验报告  “提高学生英语言语技能”研究课题实验报告  一、课题研究的背景和目标 1、问题的提出现在中学英语教学最大的弊病就是学生缺少言语技能。为了改善学生的交际能力,我们提出了“提高学生英言语技能”的研究课题。为此我们在高中各年级进行了长达四年的课题研究,积累了一定的经验。 2、课题研究的目标和主要内容课题组根据英语教学大纲的要求,培养学生在口头上运用英

c***n 12年前 上传452   0

操作系统实验报告C语言实现银行家算法

实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调试组员(姓名,学号)主要任务实验报告的完成组员(姓名,学号)主要任务实验报告的完成

文***品 3年前 上传511   0

铜陵学院C语言程序设计实验报告

《C语言程序设计》 实验报告第二学期班 级 学 号姓 名指导教师实验一 Visual C++ 6.0编程环境与C语言程序的调试过程一、实验学时2 学时。二、实验目的1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。三、预习

文***享 1年前 上传302   0

C语言实验报告《逻辑结构程序设计》

C语言实验报告《逻辑结构程序设计》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验二  逻辑结构程序设计  一、 实验目的  1、学会正确使用逻辑运算符和逻辑表达式  2、熟练掌握if语句和switch语句 

s***0 12年前 上传787   0

硬件维保方案

IT设备整体服务方案Version 1.02011年X月 目 录第1章、 概述 41.1、 前言 41.2、 IT服务外包定义及发展现状 51.3、 IT服务外包优势 6第2章、 方案描述 82.1 概况与需求 82.2 定义 102.3 整体服务范围 10第3章、 服务方案 123.1、 整体服务实施计划 123.2、

文***品 3年前 上传753   0

硬件组成更明了

硬件组成更明了【教学目标】1.知识与技能:(1)认识机箱内的硬件。(2)了解机箱内主要部件的作用。(3)了解电脑系统的组成。(4)了解电脑的基本工作流程。2.过程与方法:(1)通过图片或实物观察,认识机箱内部的硬件。(2)学会对计算机硬件进行分类。3.情感态度与价值观:通过图片或实物观察,消除对计算机硬件的神秘感。【教学重难点】1.教学重点:(1)机箱内硬件的认识和

笑***7 3年前 上传649   0

硬件设备运维方案

目 录1 概述 222 服务内容 222.1 服务目标 222.2 信息资产统计服务 232.3 网络、安全系统运维服务 232.4 服务器设备、存储系统运维服务 262.5 数据库系统运维服务 282.6 视频会议系统运维服务 302.7 中间件运维服务 303 运维服务流程 324 服务管理制度规范 344.1 服务时间 344.2 行为

工***单 4年前 上传1265   0

集体配送硬件要求

集体配送应具备如下功能间:收货验货间、食品库房、洁具间、粗加工间、切配间、烹饪间(包含蒸饭)、二次更衣间、分装间、清洗消毒间。

s***4 6年前 上传1471   0

西工大20年10月《经济数学(下)》作业(参考)

拿答案20199.10207西北工业大学网络教育学院2020年10月大作业 课程名称: 经济数学(下)一、(4分,共16分)1. ( )。A. -3 B. 5 C. 1 D. 02. 在下列四个向量组中线性无关的向量组有( )。A. 一个 B. 两个 C. 三个 D. 四个3. 设事件 与事件 互斥,则( )。A. B. C. D.4. 设总体 , 和 未知, , ,…

学***询 4年前 上传707   0

西工大计算机网络实验四

实 验 报 告实验四、解析IP分组一、实验目的1、IP分组是网络层传输的基本单元,通过接受和解析IP分组,了解IP分组基本结构,与IP协议基本功能;2、输出TCP报文数据,以16进制输出,建立TCP连接,分析TCP的三次握手。二、实验过程(1)实验流程(2)实验原理:想要抓取网络中的IP数据包,必须对网卡进行编程,我们使用套接

文***品 2年前 上传492   0

硬件单板测试模板

目录目录 21 目的和范围 42 设备 52.1 测试设备 52.2 测试平台 52.3 被测部件 53 测试程序 63.1 黑盒测试 63.1.1 接口电气特性测试 63.1.2 外部电源适用性测试 63.1.3 通讯协议测试 63.1.4 容错与异常输入测试 63.1.5 其他规格符合性测试 63.2 白盒测试 73.2.1 电源质量测试 73.2.2 支路电

z***u 2年前 上传491   0

硬件购买及服务合同

硬件购买及服务合同  甲方:_________________________  乙方:_________________________  签约地点:_____________________  签约时间:_______年____月____日  兹有乙方向甲方提供硬件的服务,本着平等互利的原则,经双方友好协商签订合同如下:  一、双方的权利和义务  1.乙方服务:

g***j 10年前 上传654   0

硬件测试工程师的职责

硬件测试工程师的职责职责:1. 负责医疗设备硬件部件独立测试和质量评价,包括产品需求分析,测试平台搭建/测试工具开发,编写测试规范,测试执行及提交报告等;2. 熟悉和分析设备的子系统/部件软硬件需求,提出部件可测性,可服务性,可靠性等测试需求,并制定相应测试方案;3. 根据测试计划,完成测试需求分析,测试用例编写,测试执行及测试总结,含测试环境搭建,和仿真测试环境的开发及验证;4. 负

l***6 2年前 上传487   0