当前位置:首页 > 北航verilog上机实验报告
Verilog上机实验报告
2. 实验总结
本次实验是Verilog上机的第三个实验,由于有了实验二中的经验,所以只需要把实验二中的程序稍加修改即可得到结果。
但是在实验的过程中我依然遇到了一些阻碍。
首先是由于数量级关系没有搞对,使得计数器的位数出了问题。其次是在测试文件中调用了$stop,而自己预设的stop的延迟时间太短,导致输出时钟为低电平(实际上时间还不到一个周期),令自己误以为自己的程序本身有逻辑问题,从而耽误了很多时间。
在看输出波形的长度的时候,可以用modelsim中的cursor功能,用光标来显示波形持续的长度。
17
Verilog上机实验报告
实验四 阻塞赋值与非阻塞赋值的区别
一、 实验目的
1. 通过实验,掌握阻塞赋值与非阻塞赋值的概念和区别;
2. 了解非阻塞和阻塞赋值的不同使用场合;
3. 学习测试模块的编写、综合和不同层次的仿真。
二、 实验内容
在blocking模块中按如下两种写法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果
(1) always @(posedge clk)
begin c=b; b=a; end
(2) always @(posedge clk) b=a;
always @(posedge clk) c=b;
三、 对任务的理解
通过给定的两段代码理解所谓阻塞赋值与非阻塞赋值的区别。
四、 实现思路
按照给定的代码进行试验,并查看实验结果。
五、 代码
1. 主程序
---------------------------------------文件名 blocking.v--------------------------------------------
module blocking(clk, a,b,c); output [3:0] b,c; input [3:0] a;
18
Verilog上机实验报告
input clk; reg [3:0] b,c;
always @(posedge clk) begin c = b; b = a;
$display(\ end
endmodule
---------------------------------------文件名 blocking_ex.v-------------------------------------------- module blocking_ex(clk, a,b,c); output [3:0] b,c; input [3:0] a; input clk; reg [3:0] b,c;
always @(posedge clk) b = a;
always @(posedge clk) begin c = b;
$display(\ end
endmodule
2. 测试模块
----------------------------------------文件名 div_ex_tb.v----------------------------------- `timescale 1ns/100ps `include\
`include\
module compareTop; wire [3:0] b1,c1,b2,c2; reg [3:0] a; reg clk;
initial begin clk=0;
forever #50 clk=~clk; end
19
Verilog上机实验报告
initial begin a=4'h3;
$display(\ #100 a=4'h7;
$display(\ #100 a=4'hf;
$display(\ #100 a=4'ha;
$display(\ #100 a=4'h2;
$display(\ #100
$display(\ $stop; end
blocking_ex(clk,a,b2,c2);
blocking blocking(clk,a,b1,c1); endmodule
六、 仿真波形
七、 总结及对波形的说明
1. 实验结论
从波形中可以看出这两种写法都相当于例题中的非阻塞赋值。
第一个写法中,先用b对c赋值,再用a对b赋值。相当于先把b的值进行了向下传递,在对b进行改写。因此b的前一个值没有被抹掉,被传递了下来。
第二个写法中,阻塞赋值分别被放在不同的always块总。理论上来说所有的always块都是并行执行的,因此这种写法应当与阻塞赋值是相当的。但是结果中可以看出这种写法却与非阻塞赋值的结果相同。这就说明由于计算机本身的局限性,在仿真的时候,
20
共分享92篇相关文档