资源描述:
《夏宇闻verilog设计示范和上机习题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、设计示范和上机习题练习一.简单的组合逻辑设计//(方法一)://---------------文件名compare.v-----------------modulecompare(equal,a,b);inputa,b;outputequal;assignequal=(a==b)?1:0;//a等于b时,equal输出为1;a不等于b时,equal输出为0。endmodule//(方法二):modulecompare(equal,a,b);inputa,b;outputequal;regequal;always@(aorb)if(a==b)
2、//a等于b时,equal输出为1;equal=1;else//a不等于b时,equal输出为0。equal=0;//思考:如果不写else部分会产生什么逻辑?endmodule//-------------------------------------------------------------//----------测试模块源代码(方法之一):`timescale1ns/1ns//定义时间单位。`include"./compare.v"//包含模块文件。在有的仿真调试环境中并不需要此语句。//而需要从调试环境的菜单中键入有关模块文
3、件的路径和名称modulet;rega,b;wireequal;initial//initial常用于仿真时信号的给出。begina=0;b=0;#100a=0;b=1;#100a=1;b=1;#100a=1;b=0;#100a=0;b=0;60#100$stop;//系统任务,暂停仿真以便观察仿真波形。endcomparem(.equal(equal),.a(a),.b(b));//调用被测试模块t.mendmodule//----------测试模块源代码(方法之二):-------------------------`timescal
4、e1ns/1ns//定义时间单位。`include"./compare.v"//包含模块文件。在有的仿真调试环境中并不需要此语句。//而需要从调试环境的菜单中键入有关模块文件的路径和名称modulet;rega,b;regclock;wireequal;initial//initial常用于仿真时信号的给出。begina=0;b=0;clock=0;//定义一个时钟变量endalways#50clock=~clock;//产生周期性的时钟always@(posedgeclock)//在每次时钟正跳变沿时刻产生不同的a和bbegina={$r
5、andom}%2;//每次a是0还是1是随机的。b={$random}%2;//每次b是0还是1是随机的。endinitialbegin#100000$stop;end//系统任务,暂停仿真以便观察仿真波形。comparem(.equal(equal),.a(a),.b(b));//调用被测试模块t.mendmodule练习二.简单分频时序逻辑电路的设计//-------------------------文件名:half_clk.v--------------------------------modulehalf_clk(reset,c
6、lk_in,clk_out);inputclk_in,reset;outputclk_out;60regclk_out;always@(posedgeclk_in)beginif(!reset)clk_out=0;elseclk_out=~clk_out;endendmodule//----------测试模块的源代码:------------------------//-------------------文件名top.v-----------------------------`timescale1ns/100ps`defineclk_
7、cycle50moduletop;regclk,reset;wireclk_out;always#`clk_cycleclk=~clk;//产生测试时钟initialbeginclk=0;reset=1;#10reset=0;#110reset=1;#100000$stop;endhalf_clkm0(.reset(reset),.clk_in(clk),.clk_out(clk_out));endmodule练习三.利用条件语句实现计数分频时序电路//--------------模块源代码:------------------------
8、-----//---------------fdivision.v-----------------------------modulefdivision(RESET,F10M,