热度 24
2012-11-13 23:27
1374 次阅读|
0 个评论
郁闷,这已经是第三次写这篇博客,因为前面两次因没保存丢了,你说郁闷不?? 说说今天,早上骑着“宝马”上班,早餐没有像往常一样吃包子、喝豆浆,而是吃了个什么粉,怎一个香子了得。上班早上就是无聊的测灵敏度,下午画了画C8051F340的原理图(为做LED显示屏),晚上来准备做自己喜欢吃的“干饭”,就边做边听歌,结果呢,一首“今天”太好听,就忘了自己是谁,“干饭”成了“灰碳饭”!!可只好吃,不吃怎么搞TestBench… 输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。方法见下: inout bi_dir_port; wire bi_dir_port; reg 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 Sel; input Data; output Shift_Out; reg 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 Sel; reg Data; wire 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 也就添加波形。在之后就是开始仿真,最后看美丽的波形吧!! 不仔细,不静下来,没有红色字体行,是永远也仿真不成功的。好了,赶紧保存,否则有麻烦了!!