郁闷,这已经是第三次写这篇博客,因为前面两次因没保存丢了,你说郁闷不??
说说今天,早上骑着“宝马”上班,早餐没有像往常一样吃包子、喝豆浆,而是吃了个什么粉,怎一个香子了得。上班早上就是无聊的测灵敏度,下午画了画C8051F340的原理图(为做LED显示屏),晚上来准备做自己喜欢吃的“干饭”,就边做边听歌,结果呢,一首“今天”太好听,就忘了自己是谁,“干饭”成了“灰碳饭”!!可只好吃,不吃怎么搞TestBench…
输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。方法见下:
inout [0:0] bi_dir_port;
wire [0:0] bi_dir_port;
reg [0:0] bi_dir_port_reg;
reg bi_dir_port_oe;
assign bi_dir_port=bi_dir_port_oe?bi_dir_port_reg:1'bz;
先来个简单的例子:
`timescale 1ns/1ns
module shift_reg(CLK,RSTn,Load,Sel,Data,Shift_Out);
input CLK,RSTn;
input Load;
input [1:0] Sel;
input [7:0] Data;
output [7:0] Shift_Out;
reg [7:0] rShift_Out;
always @ (posedge CLK or negedge RSTn)
begin
if(!RSTn) rShift_Out <= 7'b0;
else if(Load) rShift_Out <= Data;
else
case (Sel)
2'b00: rShift_Out <= rShift_Out;
2'b01: rShift_Out <= rShift_Out << 1;
2'b10: rShift_Out <= rShift_Out >> 1;
default: rShift_Out <= rShift_Out;
endcase
end
assign Shift_Out = rShift_Out;
endmodule
测试激励.v
`timescale 1ns/1ns
module shift_reg_tp;
reg CLK;
reg RSTn;
reg Load;
reg [1:0] Sel;
reg [7:0] Data;
wire [7:0] Shift_Out;
shift_reg LUT(
.CLK(CLK),
.RSTn(RSTn),
.Load(Load),
.Sel(Sel),
.Data(Data),
.Shift_Out(Shift_Out)
);
initial begin
CLK = 0;
forever #50 CLK = ~CLK;
end
initial begin
RSTn = 1;
Sel = 2'b00;
Load = 0;
Data = 8'b0;
#200 RSTn = 0;
#200 RSTn = 1;
#100 Load = 1;
#100 Data = 8'b0000_0001;
#100 Load = 0;
#200 Sel = 2'b00;
#200 Sel = 2'b01;
#200 Sel = 2'b10;
#200 Sel = 2'b11;
#400 $stop;
end
initial begin
$timeformat(-9,1,"ns",12);
$display(" Time Clk Rst Ld SftRg Data Sel");
$monitor("%t %b %b %b %b %b %b", $realtime,
CLK, RSTn, Load, Shift_Out, Data, Sel);
end
endmodule
关于ModelSim 仿真小结:
1、当然见工程,来两个.v文件,肯定是要编译通过的,若通不过,希望自己静下心来,逐字逐行慢慢分析吧。
2、Simulate -> Start Simulation 则会出现一个对话框,选择测试激励。选择Object 中的任意一个,右击选择Add View 也就添加波形。在之后就是开始仿真,最后看美丽的波形吧!!
不仔细,不静下来,没有红色字体行,是永远也仿真不成功的。好了,赶紧保存,否则有麻烦了!!
文章评论(0条评论)
登录后参与讨论