北航-verilog实验报告Word文档下载推荐.docx
- 文档编号:3670481
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:53
- 大小:209.05KB
北航-verilog实验报告Word文档下载推荐.docx
《北航-verilog实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北航-verilog实验报告Word文档下载推荐.docx(53页珍藏版)》请在冰点文库上搜索。
5仿真结果 16
选作四:
运用always块设计一个8路数据选择器。
16
1实验要求 16
2模块代码 16
3测试代码 17
4仿真结果 18
实验五:
在VerilogHDL中使用函数 19
1实验目的 19
2实验设备 19
3实验内容 19
4实验代码 19
5仿真结果 21
选作五:
设计一个带控制端的逻辑运算电路 22
1实验要求 22
2模块代码 22
3测试代码 23
4仿真结果 25
实验六:
在VerilogHDL中使用任务(task) 25
1实验目的 25
2实验设备 25
3实验内容 25
4实验代码 25
5仿真结果 28
选作六:
冒泡法排序 28
1实验要求 28
2模块代码 28
3测试代码 29
4仿真结果 30
选作七:
串行输入排序 31
1实验要求 31
2模块代码 31
3测试代码 33
4仿真结果 34
5实验分析 34
实验七:
利用有限状态机进行时序逻辑的设计 35
1实验目的 35
2实验设备 35
3实验内容 35
4实验代码 35
5仿真结果 37
6实验分析 37
选作八:
楼梯灯 38
1实验要求 38
2模块代码 38
3测试代码 45
4仿真结果 47
5实验分析 47
附:
分工明细 49
实验一简单组合逻辑设计
1实验目的
1、掌握基本组合逻辑电路的实现方法。
2、初步了解两种基本组合逻辑电路的生成方法。
3、学习测试模块的编写。
4、通过综合和布局布线了解不同层次仿真的物理意义。
2实验设备
安装Modelsim-6.5c的PC机。
3实验内容
描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出结果
1,否则给出结果0。
4实验代码
模块源代码:
modulecompare(equal,a,b);
inputa,b;
outputequal;
assignequal=(a==b)?
1:
0;
endmodule
测试代码:
`timescale1ns/1ns;
`include"
compare.v"
modulecompare_tb;
rega,b;
wireequal;
initialbegin
a=0;
b=0;
#100a=0;
b=1;
#100a=1;
b=0;
#100$stop;
end
comparem(.equal(equal),.a(a),.b(b));
endmodule5仿真结果
设计一个字节的比较器
1实验要求
比较两个字节的大小,如a[7:
0]大于b[7:
0],则输出高电平,否则输出低电平;
并改写测试模型,使其能进行比较全面的测试。
2模块代码
modulecompare_8bit(result,a,b);
input[7:
0]a,b;
outputresult;
assignresult=(a>
b)?
endmodule3测试代码
`timescale1ns/1ns
compare_8bit.v"
moduletest;
reg[7:
wireresult;
initialbegin
a=8'
d0;
b=8'
#100a=8'
d6;
d5;
d9;
d12;
d15;
end
compare_8bitm(.result(result),.a(a),.b(b));
endmodule4仿真结果
实验二简单分频时序逻辑电路的设计
1、掌握最基本组合逻辑电路的实现方法。
2、学习时序电路测试模块的编写。
3、学习综合和不同层次的仿真。
用always块和@(posedgeclk)或@(negedgeclk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果。
模块代码:
modulehalf_clk(reset,clk_in,clk_out);
inputclk_in,reset;
outputclk_out;
regclk_out;
always@(posedgeclk_in)begin
if(!
reset)clk_out=0;
elseclk_out=~clk_out;
`timescale1ns/100ps
`defineclk_cycle50moduletext;
regclk,reset;
wireclk_out;
always#`clk_cycleclk=~clk;
initialbegin
clk=0;
reset=1;
#10reset=0;
#110reset=1;
#100000$stop;
half_clkm(.reset(reset),.clk_in(clk),.clk_out(clk_out));
七段数码管译码电路
设计一个七段数码管译码电路。
moduleqiduanma(in,out);
input[3:
0]in;
output[6:
0]out;
reg[6:
always@(in)begin
case(in)
4'
b0000:
out=7'
b1111110;
b0001:
b0110000;
b0010:
b1101101;
b0011:
b1111011;
b0100:
b0110011;
b0101:
b1011011;
b0110:
b0011111;
b0111:
b1110000;
b1000:
b1111111;
b1001:
b1110011;
b1010:
b0001101;
b1011:
b0011001;
b1100:
b0100011;
b1101:
b1001011;
b1110:
b0001111;
b1111:
b0000000;
endcaseend
qiduanma.v"
reg[3:
0]in;
wire[6:
0]out;
integert;
initial
begin
in=4'
b0000;
for(t=0;
t<
b1111;
t=t+1)#100in<
=in+1;
qiduanmam(.in(in),.out(out));
利用条件语句实现计数分频时序电路
1、掌握条件语句在简单时序模块设计中的使用。
2、学习在Verilog模块中应用计数器。
3、学习测试模块的编写、综合和不同层次的仿真。
仿真一个可综合风格的分频器,将10MB的时钟分频为500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。
modulefdivision(RESET,F10M,F500K);
inputF10M,RESET;
outputF500K;
regF500K;
0]j;
always@(posedgeF10M)if(!
RESET)
beginF500K<
=0;
j<
else
beginif(j==9)
j<
F500K<
=~F500K;
endelse
=j+1;
`defineclk_cycle50
moduletest_fdivision;
regF10M,RESET;
wireF500K_clk;
always#`clk_cycleF10M=~F10M;
RESET=1;
F10M=0;
#100RESET=0;
#100RESET=1;
#10000$stop;
fdivisionm(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk));
endmodule5仿真结果
6实验分析
书中程序if(j==19)段应改为if(j==9)
利用10MHZ的时钟,设计一个单周期形状的周期波形。
moduleexp3(RESET,F10M,F_OUT);
outputF_OUT;
regF_OUT;
reg[15:
beginF_OUT<
case(j)199:
F_OUT<
=1;
299:
499:
moduletest_exp3;
wireF;
#1000000$stop;
exp3m2(.RESET(RESET),.F10M(F10M),.F_OUT(F));
用always块实现较复杂的组合逻辑
1、掌握用always实现较大组合逻辑电路的方法。
2、进一步了解assign与always两种组合电路实现方法的区别和注意点。
3、学习测试模块中随机数的产生和应用。
4、学习综合不同层次的仿真,并比较结果。
设计一个简单的指令译码电路,该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。
//--------------------alu.v-------------------------
`defineplus 3'
d0
`defineminus3'
d1
`defineband 3'
d2
`definebor 3'
d3
`defineunegate3'
d4
modulealu(out,opcode,a,b);
output[7:
input[2:
0]opcode;
input[7:
0]a,b;
//?
?
always@(opcodeoraorb)begin
case(opcode)
`plus:
out=a+b;
`minus:
out=a-b;
`band:
out=a&
b;
`bor:
out=a|b;
`unegate:
out=~a;
default:
out=8'
hx;
endcase
//------------------alutest.v---------------------------
./alu.v"
modulealutest;
wire[7:
reg[7:
reg[2:
parametertimes=5;
a={$random}%256;
[0,255]?
b={$random}%256;
opcode=3'
h0;
repeat(times)begin
#100a={$random}%256;
b={$random}%256;
opcode=opcode+1;
#100 $stop;
alualu1(out,opcode,a,b);
endmodule
5仿真结果
每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化。
moduleexp5(slt,in0,in1,in2,in3,in4,in5,in6,in7,out);
input[2:
0]slt;
input[3:
0]in0,in1,in2,in3,in4,in5,in6,in7;
output[3:
reg[3:
always@(in0orin1orin2orin3orin4orin5orin6orin7orslt)case(slt)
3'
d0:
out<
=in0;
3'
d1:
=in1;
d2:
=in2;
d3:
=in3;
d4:
=in4;
d5:
=in5;
d6:
=in6;
d7:
=in7;
endcaseendmodule
3测试代码
moduletest_exp5_2;
0]slt=0;
regclk;
wire[3:
always#10clk=~clk;
always@(posedgeclk)
slt=slt+1;
beginin0=1;
in1=3;
in2=5;
in3=7;
in4=9;
in5=11;
in6=13;
in7=15;
end#160
beginin0=0;
in1=2;
in2=4;
in3=6;
in4=8;
in5=10;
in6=12;
in7=14;
exp5m(.slt(slt),.in0(in0),.in1(in1),.in2(in2),.in3(in3),.in4(in4),.in5(in5),.in6(in6),.in7(in7),.out(out));
在VerilogHDL中使用函数
1、了解函数的定义和在模块设计中的使用。
2、了解函数的可综合性问题。
3、了解许多综合器不能综合复杂的算术运算。
做一个函数调用的示例,采用同步时钟触发运算的执行,每个clk时钟周期执行一次运算,在测试模块中,调用系统任务$display及在时钟的下降沿显示每次运算的结果。
moduletryfunct(clk,n,result,reset);
output[31:
0]result;
input[3:
0]n;
inputreset,clk;
reg[31:
always@(posedgeclk)begin
reset)result<
result<
=n*factorial(n)/((n*2)+1);
function[31:
0]factorial;
0]operand;
0]index;
factorial=operand?
for(index=2;
index<
=operand;
index=index+1)factorial=index*factorial;
endendfunction
`include"
tryfunct.v"
moduletest_tryfunct;
0]n,i;
regreset,clk;
wire[31:
n=0;
reset=1;
#100reset=0;
#100reset=1;
for(i=0;
i<
=15;
i=i+1)begin
#200n=i;
tryfunctm(.clk(clk),.n(n),.result(result),.reset(reset));
设计一个带控制端的逻辑运算电路
分别完成正整数的平方、立方和最大数为5的阶乘的运算,要求可综合。
编写测试模块,并给出各种层次的仿真波形,比较它们的不同。
moduletryfunct2(clk,n,result,reset,select);
output[31:
input[1:
0]select;
case(select)0:
=square(n);
1:
=cube(n);
2:
=factorial(n);
default:
result=32'
endcase
endend
0]square;
square=operand*operand;
endfunction
0]cube;
cube=operand*operand*operand;
factorial=(operand&
&
(operand<
=5))?
tryfunct2.v"
moduletest_tryfunct2;
reg[1:
0]select;
for(select=0;
select<
=2;
select=select+1)
for(i=0;
=6;
for(select=0;
select=select+1)#100n=i;
alwa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北航 verilog 实验 报告