北邮电子院专业实验报告

上传人:汽*** 文档编号:432874940 上传时间:2024-01-23 格式:DOCX 页数:16 大小:34.38KB
返回 下载 相关 举报
北邮电子院专业实验报告_第1页
第1页 / 共16页
北邮电子院专业实验报告_第2页
第2页 / 共16页
北邮电子院专业实验报告_第3页
第3页 / 共16页
北邮电子院专业实验报告_第4页
第4页 / 共16页
北邮电子院专业实验报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《北邮电子院专业实验报告》由会员分享,可在线阅读,更多相关《北邮电子院专业实验报告(16页珍藏版)》请在金锄头文库上搜索。

1、电子工程学院ASIC 专业实验报告班级:姓名:学号:班内序号:第一部分 语言级仿真LAB 1:简单的组合逻辑设计实验目的掌握基本组合逻辑电路的实现方法。,否则给=b)?1:0测试模实验原理本实验中描述的是一个可综合的二选一开关,它的功能是当sel = 0 时,给出 out = a出结果 out = b 。在 Verilog HDL 中,描述组合逻辑时常使用 assign 结构。 equal=(a= 是一种在组合逻辑实现分支判断时常用的格式。 parameter 定义的 size 参数决定位宽。 块用于检测模块设计的是否正确,它给出模块的输入信号,观察模块的内部信号和输出信号。三、源代码mux.

2、vmodule scale_mux(out,sel,b,a); parameter size=1;outputsize-1:0 out;inputsize-1:0b,a;input sel;assign out = (!sel)?a:(sel)?b:size1bx;endmodulemux_test.vdefi ne width 8timescale 1 ns/1 ns module mux_test;regwidth:1a,b;wirewidth:1out;reg sel; scale_mux#(width)m1(.out(out),.sel(sel),.b(b),.a(a);initial

3、begin$monitor($stime,sel=%b a=%b b=%b out=%b,sel,a,b,out); $dumpvars(2,mux_test);sel=0;b=width1b0;a=width1b1; #5sel=0;b=width1b1;a=width1b0; #5sel=1;b=width1b0;a=width1b1; #5sel=1;b=width1b1;a=width1b0;#5 $finish;end endmodule四、仿真结果与波形LAB 2:简单时序逻辑电路的设计一、实验目的掌握基本时序逻辑电路的实现。二、实验原理在Verilog HDL中,相对于组合逻辑电

4、路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型中,我们常使用always块和(posedge clk)或(门egedge clk)的结构来表述时序逻辑。在 always 块中,被赋值的信号都必须定义为 reg 型,这是由时序逻辑电路的特点所决定的对于 reg 型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了正确地观察到仿真结果, 在可综合的模块中我们通常定义一个复位信号 rst- ,当它为低电平时对电路中的寄存器进行复 位。三、源代码counter.vtimescale 1 ns/100 psmodule counter(cnt,clk,data,rst_,

5、load);output4:0cnt ;input 4:0data;inputclk;inputrst_;inputload;reg 4:0cnt; always(posedge clk or negedge rst_) if(!rst_)#1.2 cnt=0;elseif(load)cnt=#3 data;elsecnt=#4 cnt + 1;endmodule counter_test.vtimescale 1 ns/1 ns module counter_test;wire4:0cnt;reg 4:0data;reg rst_;reg load;reg clk;counter c1(.c

6、nt (cnt),.clk (clk),.data(data),.rst_(rst_),.load(load);initial beginclk=0;forever begin#10 clk=1b1;#10 clk=1b0;endendinitial begin$timeformat(-9,1,ns,9);$monitor(time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b,$stime,data,clk,rst_,load,cnt);$dumpvars(2,counter_test);endtask expect;input 4:0expects;if

7、(cnt !=expects)begin $display(At time %t cnt is %b and should be %b, $time,cnt,expects);$display(TEST FAILED);$finish;endendtaskinitialbegin(negedge clk)rst_,load,data=7b0_X_XXXXX;(negedge clk)expect(5h00);rst_,load,data=7b1_1_11101;(negedge clk)expect(5h1D); rst_,load,data=7b1_0_11101;repeat(5)(neg

8、edge clk);expect(5h02);rst_,load,data=7b1_1_11111;(negedge clk)expect(5h1F); rst_,load,data=7b0_X_XXXXX;(negedge clk)expect(5h00); $display(TEST PASSED);$finish;endendmodule四、仿真结果与波形五、思考题该电路中, rst- 是同步还是异步清零端?在 counter.v 的 always 块中 reset 没有等时钟,而是直接清零。所以是异步清零端。LAB 3:简单时序逻辑电路的设计一、实验目的使用预定义的库元件来设计八位寄存

9、器。二、实验原理八位寄存器中,每一位寄存器由一个二选一MUX个触发器dffr组成,当load=1,装载数据;当 load=0 ,寄存器保持。对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。三、源代码clock.vtimescale 1 ns /1 nsmodule clock(clk);reg clk;output clk;initial beginclk=0;forever begin#10 clk=1b1;#10 clk=1b0;endendendmodule mux及dffr模块调用代码mux mux7(.out(n17),.sel(load), .b(data7), .a

10、(out7);dffr dffr7 (.q(out7), .d(n17), .clk(clk), .rst_(rst_) );mux mux6 (.out(n16), .sel(load), .b(data6), .a(out6);dffr dffr6 (.q(out6), .d(n16), .clk(clk), .rst_(rst_) );mux mux5 (.out(n15), .sel(load), .b(data5), .a(out5);dffr dffr5 (.q(out5), .d(n15), .clk(clk), .rst_(rst_) );mux mux4 (.out(n14)

11、, .sel(load), .b(data4), .a(out4);dffr dffr4 (.q(out4), .d(n14), .clk(clk), .rst_(rst_);mux mux3 (.out(n13), .sel(load), .b(data3), .a(out3);dffr dffr3 (.q(out3), .d(n13), .clk(clk), .rst_(rst_) );mux mux2 (.out(n12), .sel(load), .b(data2), .a(out2);dffr dffr2 (.q(out2), .d(n12), .clk(clk), .rst_(rs

12、t_) );mux mux1 (.out(n11), .sel(load), .b(data1), .a(out1);dffr dffr1 (.q(out1), .d(n11), .clk(clk), .rst_(rst_) );mux mux0 (.out(n10), .sel(load), .b(data0), .a(out0);dffr dffr0 (.q(out0),.d(n10),.clk(clk),.rst_(rst_);例化寄存器register r1(.data(data),.out(out),.load(load),.clk(clk),.rst_(rst_);例化时钟cloc

13、k c1(.clk(clk);添加检测信号initialbegin$timeformat(-9,1,ns,9);$monitor(time=%t,clk=%b,data=%h,load=%b,out=%h,$stime,clk,data,load,out); $dumpvars(2,register_test);end四、仿真结果与波形LAB 4:用 always 块实现较复杂的组合逻辑电路一、实验目的掌握用 always 实现组合逻辑电路的方法; 了解 assign 与 always 两种组合逻辑电路实现方法之间的区别。二、实验原理仅使用 assign 结构来实现组合逻辑电路,在设计中会发现

14、很多地方显得冗长且效率低下。 适当地使用 always 来设计组合逻辑,会更具实效。本实验描述的是一个简单的ALU指令译码电路的设计示例。它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变 化,结果都要做出及时的反应。示例中使用了电平敏感的 always 块,电平敏感的触发条件是指在 后括号内电平列表的任何 一个电平发生变化就能触发 always 块的动作,并且运用了 case 结构来进行分支判断。在always中适当运用default (在case结构中)和else (子ifelse结构中),通常可 以综合为纯组合逻辑,尽管被赋值的变量一定要定义为 reg 型。如果不使用 default 或 else 对 缺省项进行说明,易产生意想不到的锁存器。三、源代码电路描述always(opcode or data or accum)beginif(accum=8b00000000)#1.2 zero=1;els

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号