用verilog HDL设计的4x4键盘扫描程序的testbench怎么写

2019-03-25 07:17发布

小白求教部分程序如图 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
dkyeew
1楼-- · 2019-03-25 13:40
< / 小白来回复一下,错了保函。测试模块只需要三个输入,clk,start,kbcol,很简单啊,如果只是测试功能的话,让start过几个时钟周期翻转,并且kbcol自增,看对应输出结果是否正确吧
火影星飞
2楼-- · 2019-03-25 18:39
 精彩回答 2  元偷偷看……
火影星飞
3楼-- · 2019-03-26 00:08
module gmdz40x40(clk,start,col,row,row_out,col_out);
input clk;            //扫描时钟信号,高电平有效
input start;          //开始信号,高电平有效
input[39:0]col;      //行扫描信号

output[39:0]row;     //列扫描信号
output[5:0]row_out;  //光照后列输出信号
output[5:0]col_out;  //光照后行输出信号

reg[39:0]row;
reg[5:0]col_out;
reg[5:0]row_out;
reg[5:0]col_out0;
reg[5:0]row_out0;
reg[5:0]count;
reg[5:0]sta;            
reg[10:0]dat;
reg gz;                //光照标志位,判断是否有光照

always @(posedge clk)
    begin
       if(start == 0)
                   begin
                     col_out0<=6'd0;
                          row_out0<=6'd0;
                        end
                 else begin
                    if(count == 6'd39)
                         begin
                                count<=6'd0;
                              end
                    else
                      begin
                              count<=count+1;
                                        //循环列扫描
                                        case(count)
                                           6'b000001 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0000_0001;sta<=6'd1; end
                                                6'b000010 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0000_0010;sta<=6'd2; end
                                                6'b000011 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0000_0100;sta<=6'd3; end
                                                6'b000100 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0000_1000;sta<=6'd4; end
                                                6'b000101 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0001_0000;sta<=6'd5; end
                                                6'b000110 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0010_0000;sta<=6'd6; end
                                                6'b000111 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_0100_0000;sta<=6'd7; end
                                                6'b001000 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0000_1000_0000;sta<=6'd8; end
                                                6'b001001 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0001_0000_0000;sta<=6'd9; end
                                                6'b001010 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0010_0000_0000;sta<=6'd10; end
                                                6'b001011 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_0100_0000_0000;sta<=6'd11; end
                                                6'b001100 : begin row<=40'b0000_0000_0000_0000_0000_0000_0000_1000_0000_0000;sta<=6'd12; end
                                                6'b001101 : begin row<=40'b0000_0000_0000_0000_0000_0000_0001_0000_0000_0000;sta<=6'd13; end
                                                6'b001110 : begin row<=40'b0000_0000_0000_0000_0000_0000_0010_0000_0000_0000;sta<=6'd14; end
                                                6'b001111 : begin row<=40'b0000_0000_0000_0000_0000_0000_0100_0000_0000_0000;sta<=6'd15; end
                                                6'b010000 : begin row<=40'b0000_0000_0000_0000_0000_0000_1000_0000_0000_0000;sta<=6'd16; end
                                                6'b010001 : begin row<=40'b0000_0000_0000_0000_0000_0001_0000_0000_0000_0000;sta<=6'd17; end
                                                6'b010010 : begin row<=40'b0000_0000_0000_0000_0000_0010_0000_0000_0000_0000;sta<=6'd18; end
                                                6'b010011 : begin row<=40'b0000_0000_0000_0000_0000_0100_0000_0000_0000_0000;sta<=6'd19; end
                                                6'b010100 : begin row<=40'b0000_0000_0000_0000_0000_1000_0000_0000_0000_0000;sta<=6'd20; end
                                                6'b010101 : begin row<=40'b0000_0000_0000_0000_0001_0000_0000_0000_0000_0000;sta<=6'd21; end
                                                6'b010110 : begin row<=40'b0000_0000_0000_0000_0010_0000_0000_0000_0000_0000;sta<=6'd22; end
                                                6'b010111 : begin row<=40'b0000_0000_0000_0000_0100_0000_0000_0000_0000_0000;sta<=6'd23; end
                                                6'b011000 : begin row<=40'b0000_0000_0000_0000_1000_0000_0000_0000_0000_0000;sta<=6'd24; end
                                                6'b011001 : begin row<=40'b0000_0000_0000_0001_0000_0000_0000_0000_0000_0000;sta<=6'd25; end
                                                6'b011010 : begin row<=40'b0000_0000_0000_0010_0000_0000_0000_0000_0000_0000;sta<=6'd26; end
                                                6'b011011 : begin row<=40'b0000_0000_0000_0100_0000_0000_0000_0000_0000_0000;sta<=6'd27; end
                                                6'b011100 : begin row<=40'b0000_0000_0000_1000_0000_0000_0000_0000_0000_0000;sta<=6'd28; end
                                                6'b011101 : begin row<=40'b0000_0000_0001_0000_0000_0000_0000_0000_0000_0000;sta<=6'd29; end
                                                6'b011110 : begin row<=40'b0000_0000_0010_0000_0000_0000_0000_0000_0000_0000;sta<=6'd30; end
                                                6'b011111 : begin row<=40'b0000_0000_0100_0000_0000_0000_0000_0000_0000_0000;sta<=6'd31; end
                                                6'b100000 : begin row<=40'b0000_0000_1000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd32; end
                                                6'b100001 : begin row<=40'b0000_0001_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd33; end
                                                6'b100010 : begin row<=40'b0000_0010_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd34; end
                                                6'b100011 : begin row<=40'b0000_0100_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd35; end
                                                6'b100100 : begin row<=40'b0000_1000_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd36; end
                                                6'b100101 : begin row<=40'b0001_0000_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd37; end
                                                6'b100110 : begin row<=40'b0010_0000_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd38; end
                                                6'b100111 : begin row<=40'b0100_0000_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd39; end
                                                6'b101000 : begin row<=40'b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000;sta<=6'd40; end
                                        endcase
                                        //行扫描译码
                                        case(sta)
                                           6'd1:begin
                                                     case(col)
火影星飞
4楼-- · 2019-03-26 00:28
这是我写的40x40的光敏电阻识别识别点光源的部分程序,下面是testbench,但仿真出现error: can't read "vsimPriv(.main_pane.wave.interior.cs.body.pw.wf:grid)": no such element in array # Error in macro ./gmdz40x40_run_msim_rtl_verilog.do line 42 # can't read "vsimPriv(.main_pane.wave.interior.cs.body.pw.wf:grid)": no such element in array # while executing # "add wave *"这样的错误
火影星飞
5楼-- · 2019-03-26 00:43
`timescale 1ns/1ns
`define clock_period 20
module gmdz40x40_tb;
//激励信号定义
  reg Clk;
  reg Start;
  reg[39:0]Col;

  wire[39:0]Row;
  wire[5:0]Row_out;
  wire[5:0]Rol_out;
  gmdz40x40 u0(
             .clk(Clk),
                            .start(Start),
                                 .col(Col),
                            .row(Row),
                            .row_out(Row_out),
                            .col_out(Col_out)
                         );
                         
  initial Clk = 1'b1;
  always #(`clock_period/2) Clk = ~Clk;
  
  initial begin
    Start = 1'b0;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1111_1110;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1111_1101;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1111_1011;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1111_0111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1110_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1101_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_1011_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1111_0111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1110_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1101_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_1011_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1111_0111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1110_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1101_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_1011_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1111_0111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1110_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1101_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_1011_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1111_0111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1110_1111_1111_1111_1111_1101;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1101_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_1011_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1111_0111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1110_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1101_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_1011_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1111_0111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1110_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1101_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_1011_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1111_0111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1110_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1101_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_1011_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1111_0111_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1110_1111_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1101_1111_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b1011_1111_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         Start = 1'b1;Col = 40'b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111;
         #40;
         $stop;
  end
endmodule
火影星飞
6楼-- · 2019-03-26 04:57
求大神告诉为啥啊

一周热门 更多>