当前位置:首页 > 北航verilog上机实验报告
Verilog上机实验报告
这些always块执行的先后顺序是随机的。因此可能会出现不一致的结果。这就是Verilog中的竞争冒险现象。在进行程序设计的时候,我们应当避免这种写法的出现。也就是说,应当在时序逻辑中避免阻塞赋值!
2. 实验总结
本次实验是Verilog上机的第四个实验,通过对例题的重现以及对思考题的实际仿真,我对阻塞和非阻塞赋值有了进一步的理解,从物理实现性上进一步明白了这两种赋值方式所代表的电路连接方式。
在进行Verilog编程的时候,我们应当对赋值方式养成良好的习惯,即在组合逻辑中使用阻塞赋值方式,在时序逻辑中使用非阻塞赋值方式。
21
Verilog上机实验报告
实验五 用always块实现比较复杂的组合逻辑电路
一、 实验目的
1.
2. 3. 4.
掌握用always实现较大组合逻辑电路的方法;
进一步了解assign与always两种组合电路实现方法的区别和注意点; 学习测试模块中随机数的产生和应用; 学习综合不同层次的仿真,并比较结果。
二、 实验内容
运用always块设计一个8路数据选择器。要求:每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化。
三、 对任务的理解
本题要求完成一个8路数据选择器。通过选择开关选通需要输出数据的端口,输入的数据从这个被选中的端口中输出。
四、 实现思路
1. 首先这个数据选择器应当有10个对外的端口,分别是:8个4位的输入端口;
一个3位的选择开关端口;一个结果的输出端口。
2. 由于题目中要求选择开关或输入数据发生变化时,输出数据相应发生变化,因
此这是一个组合逻辑的电路。
3. 测试模块要产生随机的8个4位输入数据,因此利用系统任务$random来实现。
通过一个时钟信号,每隔一段时间产生新的随机数。
五、 代码
1. 主程序
---------------------------------------文件名 selector.v--------------------------------------------
module selector(in0,in1,in2,in3,in4,in5,in6,in7,out,ctrl); input [3:0] in0,in1,in2,in3,in4,in5,in6,in7; input [2:0] ctrl;
22
Verilog上机实验报告
output [3:0] out; reg [3:0] out;
always @(*) begin
case(ctrl)
3'b000: out=in0; 3'b001: out=in1; 3'b010: out=in2; 3'b011: out=in3; 3'b100: out=in4; 3'b101: out=in5; 3'b110: out=in6; 3'b111: out=in7;
default: out=4'bx; endcase end
endmodule
2. 测试模块
----------------------------------------文件名 selector_tb.v----------------------------------- `timescale 1ns/1ns
module t;
reg[3:0] in0,in1,in2,in3,in4,in5,in6,in7; reg[2:0] ctrl; wire[3:0] out; reg clk;
initial
begin clk=0;
ctrl={$random}%8; in0={$random}; in1={$random};
23
Verilog上机实验报告
in2={$random}; in3={$random}; in4={$random}; in5={$random}; in6={$random}; in7={$random}; #10000 $stop; end
always #50 clk=~clk;
always @(posedge clk) begin
ctrl={$random}%8; in0={$random}; in1={$random}; in2={$random}; in3={$random}; in4={$random}; in5={$random}; in6={$random}; in7={$random}; end
selector m(in0,in1,in2,in3,in4,in5,in6,in7,out,ctrl); endmodule
24
共分享92篇相关文档