最新Verilog数字电路设计实验报告Word下载.docx
- 文档编号:13558393
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:46
- 大小:325.81KB
最新Verilog数字电路设计实验报告Word下载.docx
《最新Verilog数字电路设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《最新Verilog数字电路设计实验报告Word下载.docx(46页珍藏版)》请在冰豆网上搜索。
2016年4月25日
实验一简单组合逻辑设计
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;
initial
begin
a=0;
b=0;
#100a=0;
b=1;
#100a=1;
b=0;
#100$stop;
end
comparem(.equal(equal),.a(a),.b(b));
5仿真结果
选作一:
设计一个字节的比较器
1实验要求
比较两个字节的大小,如a[7:
0]大于b[7:
0],则输出高电平,否则输出低电平;
并改写测试模型,使其能进行比较全面的测试。
2模块代码
modulecompare_8bit(result,a,b);
input[7:
0]a,b;
outputresult;
assignresult=(a>
b)?
3测试代码
`timescale1ns/1ns
compare_8bit.v"
moduletest;
reg[7:
wireresult;
a=8'
d0;
b=8'
#100a=8'
d6;
b=8'
d5;
d9;
d12;
d15;
compare_8bitm(.result(result),.a(a),.b(b));
4仿真结果
实验二简单分频时序逻辑电路的设计
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)
if(!
reset)clk_out=0;
elseclk_out=~clk_out;
endmodule
`timescale1ns/100ps
`defineclk_cycle50
moduletext;
regclk,reset;
wireclk_out;
always#`clk_cycleclk=~clk;
begin
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)
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;
endcase
qiduanma.v"
reg[3:
0]in;
wire[6:
0]out;
integert;
in=4'
b0000;
for(t=0;
t<
4'
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)
RESET)
F500K<
=0;
j<
else
if(j==9)
=~F500K;
=j+1;
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));
6实验分析
书中程序if(j==19)段应改为if(j==9)
选作三:
设计一个单周期形状的周期波形。
利用10MHZ的时钟,设计一个单周期形状的周期波形。
moduleexp3(RESET,F10M,F_OUT);
outputF_OUT;
regF_OUT;
reg[15:
F_OUT<
case(j)
199:
F_OUT<
=1;
299:
499:
j<
moduletest_exp3;
wireF;
#1000000$stop;
exp3m2(.RESET(RESET),.F10M(F10M),.F_OUT(F));
实验四:
用always块实现较复杂的组合逻辑
1、掌握用always实现较大组合逻辑电路的方法。
2、进一步了解assign与always两种组合电路实现方法的区别和注意点。
3、学习测试模块中随机数的产生和应用。
4、学习综合不同层次的仿真,并比较结果。
设计一个简单的指令译码电路,该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。
//--------------------alu.v-------------------------
`defineplus3'
d0
`defineminus3'
d1
`
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Verilog 数字电路 设计 实验 报告