蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx

上传人:rrsccc 文档编号:9271500 上传时间:2021-02-13 格式:DOCX 页数:14 大小:194.09KB
返回 下载 相关 举报
蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx_第1页
第1页 / 共14页
蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx_第2页
第2页 / 共14页
蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx_第3页
第3页 / 共14页
蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx_第4页
第4页 / 共14页
蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx》由会员分享,可在线阅读,更多相关《蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院.docx(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=16b0000000000000000; else if (count=16b1111111111111111) count=16b0000000000000000; 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=

7、0;#99999 $finish;endendmodule 题目5. 试用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

8、,T2,T3,);endmodule 题目6. 试用查找真值表的方式实现真值表中的加法器,写出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;

9、3b010:COUT=0; 3b011:SUM=0; 3b011: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位

10、才行。(2)程序代码:16位同步加法器:module adder(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 co

11、ut; initial begin a=8;b=8;c=1; end initial begin #10 a=16b1111111111111111;#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),.

12、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) state=next_state; always (state or clr) if(clr)

13、 next_state=0; else case(state) 2b00: case(step) 1b0:begin next_state=2b00;out=3b001;end 1b1:begin next_state=2b01;out=3b001;end endcase 2b01: begin out=3b010; next_state=2b10; end 2b10: case(step) 1b0:begin next_state=2b00;out=3b100;end 1b1:begin next_state=2b11;out=3b100;end endcase 2b11: case(ste

14、p) 1b0:begin next_state=2b11;out=3b111;end 1b1:begin next_state=2b00;outy)=(10,12,14); (b=y)=(10,12,14); (s=y)=(11,13,15); (s0=y)=(11,13,15); endspecifyendmodulemodule b(a,s,b,y); input s,a,s,b; output y; wire s0; not #(4)U1(s0,s); delay_door U2(a,s,b,y,s0);endmodule 题目10.设计一个8位数字显示的简易频率计。要求:能够测试10H

15、z10MHz方波信号;电路输入的基准时钟为1Hz,要求测量值以8421BCD码形式输出;系统有复位键;采用分层次分模块的方法,用Verilog HDL进行设计。解答:程序代码:module x; reg standard_clk; reg test_clk; wire 7:0out; reg reset; initial begin reset=0; test_clk=0; standard_clk=0; end initial #15 reset=1; always #1 test_clk=test_clk; always #10 standard_clk=standard_clk; a U

16、1(.reset(reset),.test_clk(test_clk),.standard_clk(standard_clk),.ratio_final(out);endmodulemodule a(reset,test_clk,standard_clk,ratio_final); input reset,test_clk,standard_clk; output 7:0ratio_final; wire mul_clk; wire reset_comp; wire 7:0ratio_start; and U0(reset_comp,reset,standard_clk); t U1(.ain

17、(test_clk),.din(standard_clk),.mul(mul_clk); w U2(.clk(mul_clk),.count(ratio_start),.reset(reset_comp); c U3(.ratio_start(ratio_start),.ratio_final(ratio_final);endmodule module w(clk,count,reset); input clk,reset; output count; parameter bit=8; reg bit-1:0count; always (posedge clk or negedge reset

18、) if(!reset) count=8b00000000; else count=count+1; endmodulemodule t(ain,din,mul); parameter width=1; input width-1:0ain,din; output width*2-1:0mul; assign mul=ain*din;endmodulemodule c(ratio_start,ratio_final); input 7:0ratio_start; output 7:0ratio_final; assign ratio_final=2*ratio_start;endmodule

19、题目11. 用Verilog HDL设计一个4位LED显示器的动态扫描译码电路。要求:4个七段显示器共用一个译码驱动电路;显示的数码管清晰明亮,无闪烁现象发生。解答:module a(out,in); output out; input in; reg6:0out; wire3:0in; always(in) begin case(in) 4d0:out=7b1111110; 4d1:out=7b0110000; 4d2:out=7b1101101; 4d3:out=7b1111001; 4d4:out=7b0110011; 4d5:out=7b1011011; 4d6:out=7b10111

20、11; 4d7:out=7b1110000; 4d8:out=7b1111111; 4d9:out=7b1111011; endcase endendmodulemodule w(in1,in2,in3,in4,out1,out2,out3,out4); output out1,out2,out3,out4; input in1,in2,in3,in4; wire 3:0in1,in2,in3,in4; wire6:0out1,out2,out3,out4; a U1(.in(in1),.out(out1); a U2(.in(in2),.out(out2); a U3(.in(in3),.out(out3); a U4(.in(in4),.out(out4);endmodulemodule c; reg 3:0in1,in2,in3,in4; wire6:0out1,out2,out3,out4; initial begin in1=4b0010; in2=4b0100; in3=4b1000; in4=4b0000; end initial begin #5 in4=4b0111; in3=4b0110; in2=4b0100; in1=4b0000; end w U1(in1,in2,in3,in4,out1,out2,out3,out4); endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1