《蔡觉平老师西电verilog-hdl上机大作业(硬件描述语言)-微电子学院》由会员分享,可在线阅读,更多相关《蔡觉平老师西电verilog-hdl上机大作业(硬件描述语言)-微电子学院(14页珍藏版)》请在金锄头文库上搜索。
1、Verilog HDL数字集成电路设计原理与应用上机作业班级:*学号:*姓名:*题目1:数字集成电路的verilog HDL描述与仿真。要求:(1)学习使用Modelsim设计和仿真软件; (2)练习教材7.2.1中的例子; (3)掌握设计代码和测试代码的编写; (4)掌握测试仿真流程; (5)掌握Modelsim软件的波形验证方式。解答: 题目2: 简述begin-end语句块和fork-join语句块的区别,并写出下面信号对应的程序代码解答:(1)begin-end语句块和fork-join语句块的区别:1、执行顺序:begin-end语句块按照语句顺序执行,fork-join语句块所有语
2、句均在同一时刻执行;2、语句前面延迟时间的意义:begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间;3、起始时间:begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间;4、结束时间:begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间;5、行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。fork-join语句块为电路上电后,各电路模块同时开始工作的过程。(2)程序
3、代码:Begin-end语句:module initial_tb1;reg A,B;initialbeginA=0;B=1;#10A=1;B=0;#10B=1;#10A=0;#10B=0;#10A=1;B=1;endendmoduleFrk-join语句:module wave_tb2;reg A,B;parameter T=10;initialfork A=0;B=1;#TA=1;B=0;#(2*T)B=1;#(3*T)A=0;#(4*T)B=0;#(5*T)A=1;B=1;joinendmodule 题目3. 分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。解答:(1)阻塞赋值
4、语句module block2(din,clk,out0,out1,out2,out3);input din,clk;output out0,out1,out2,out3;reg out0,out1,out2,out3;always(posedge clk)beginout0=din;out1=out0; out2=out1;out3=out2;endendmodule(2)非阻塞赋值语句module non_block1 (din,clk,out0,out1,out2,out3);input din,clk;output out0,out1,out2,out3;reg out0,out1,o
5、ut2,out3;always(posedge clk) beginout0=din;out1=out0; out2=out1;out3=out2;endendmodule 题目4:设计16位同步计数器要求:(1)分析16位同步计数器结构和电路特点; (2)用硬件描述语言进行设计; (3)编写测试仿真并进行仿真。解答:(1)电路特点:同步计数器的时间信号是同步的;每当到达最高计数后就会重新计数。(2)程序代码:module comp_16 (count, clk, rst );output 15:0 count;input clk,rst; reg 15:0 count;always (pos
6、edge clk) if (rst)count=16b00000; else if (count=16b11111) count=16b00000; else count=count+1;endmodule(3)仿真代码:module comp_16_tb;wire 15:0 count;reg clk,rst; comp_16 U1 (count, clk, rst );always #1 clk=clk;initialbeginclk=0;rst=0;#1 rst=1;#10 rst=0;#10 rst=1;#10 rst=0;#99999 $finish;endendmodule 题目5
7、. 试用Verilog HDL门级描述方式描述如下图所示的电路。解答:module zy(D0,D1,D2,D3,S1,S2,T0,T1,T2,T3,Z);output Z;input D0,D1,D2,D3,S1,S2;wire T0,T1,T2,T3,wire1,wire2;not U1(wire1,S1), U2(wire2,S2);and U3(T0,D0,wire2,wire1), U4(T1,D1,S1,wire1), U5(T2,D2,S1,wire2), U6(T3,D3,S1,S2);or U7(Z,T0,T1,T2,T3,);endmodule 题目6. 试用查找真值表的方
8、式实现真值表中的加法器,写出Verilog HDL代码:CinainbinsumCout0000000110010100110110010101011100111111解答:module homework6(SUM,COUT,A,B,CIN);output SUM,COUT;input A,B,CIN;reg SUM,COUT;always(A or B or CIN)case(A,B,CIN) 3b000:SUM=0; 3b000:COUT=0; 3b001:SUM=1; 3b001:COUT=0; 3b010:SUM=1; 3b010:COUT=0; 3b011:SUM=0; 3b011:
9、COUT=1; 3b100:SUM=1; 3b100:COUT=0; 3b101:SUM=0; 3b101:COUT=1; 3b110:SUM=0; 3b110:COUT=1; 3b111:SUM=1; 3b111: COUT=1; endcase endmodule 题目7:设计16位同步加法器和乘法器要求:(1)分析16位同步加法器和乘法器结构和电路特点; (2)用硬件描述语言进行设计; (3)编写测试仿真并进行仿真。解答:(1)16位同步加法器和乘法器结构和电路特点:加法器的进位只用考虑一位,但是乘法器的进位要考虑到32位才行。(2)程序代码:16位同步加法器:module adder(
10、a,b,c,sum,cout); output 15:0sum; output cout; input 15:0a,b; input c; assign cout,sum=a+b+c;endmodule16位同步乘法器:module multiplier(a,b,mul); input 15:0a,b; output 31:0mul; assign mul=a*b;endmodule(3)仿真代码:16位同步加法器:module adder_tb;reg 15:0a,b; reg c; wire 15:0sum; wire cout; initial begin a=8;b=8;c=1; en
11、d initial begin #10 a=16b11111;#10 b=1; end adder U2(.a (a),.b (b),.c(c),.cout(cout),.sum(sum);endmodule16位同步乘法器:module multiplier_tb; reg 15:0a,b; wire 31:0mul; initial begin a=3;b=8; end initial begin #10 a=100; #15 b=100; end multiplier U1(.a(a),.b(b),.mul(mul);endmodule仿真截图:加法器:乘法器: 题目8. 将下面的状态转移图用Verilog HDL描述。在图中,状态机的输入只与状态的跳转有关,与状态机的输出无关,因此该状态机为摩尔型状态机。下面为三段式描述方式。解答:程序代码:module homework8(clk,out,step,clr); output 2:0out; input step,clk,clr; reg 2:0out; reg 1:0state,next_state; always (posedge clk)