LAB 5:存储器电路的设计
一、 二、
实验目的 实验原理
设计和测试存储器电路。
本实验中,设计一个模块名为mem的存储器仿真模型,该存储器具有双线数据总线及异步处理功能。由于数据是双向的,所以要注意,对memory的读写在时序上要错开。
三、 源代码
自行添加的代码
assign data= (read)?memory[addr]:8'hZ;
always @(posedge write) begin
memory[addr]<=data[7:0]; end
四、 仿真结果与波形
LAB 6:设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别
一、
实验目的
明确掌握阻塞赋值与非阻塞赋值的概念和区别; 了解阻塞赋值的使用情况。
二、 实验原理
在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的。实际时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,也使用阻塞赋值语句。
三、 源代码
blocking.v
`timescale 1 ns/ 100 ps
module blocking(clk,a,b,c); output[3:0]b,c; input [3:0]a; input clk; reg [3:0]b,c;
always@(posedge clk) begin b =a; c =b;
$display(\ end endmodule
non_blocking.v
`timescale 1 ns/ 100 ps
module non_blocking(clk,a,b,c);
output[3:0] b,c; input[3:0] a; input clk; reg [3:0]b,c;
always @(posedge clk) begin b<=a; c<=b;
$display(\ end
endmodule
compareTop.v
`timescale 1 ns/ 100 ps
module compareTop; wire [3:0] b1,c1,b2,c2; reg[3:0]a; reg clk; initial begin clk=0;
forever #50 clk=~clk; end initial
$dumpvars (2,compareTop); 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(\$finish; end
non_blocking nonblocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1); endmodule
四、 仿真结果与波形