📄 top_tb_rev1.v
字号:
`timescale 1ns / 10ps
module top_tb();
parameter verbose = 1;
// Input Registers
reg clk;
reg rst;
reg nce;
reg awe;
reg are;
reg [3:0] addr;
reg lc;
reg [12:0] din;
reg [11:0] il [63:0];
reg [11:0] iqnr [63:0];
reg [11:0] irle [63:0];
reg [11:0] ihuff [5:0];
integer i;
reg stop;
wire [22:0] data;
reg [22:0] temp;
assign data = (~nce & ~awe) ? {10'h0,din} : 23'bz;
// Generate Clock
always # 20 clk <= ~clk;
// Instantiate DUT
top_enc top_enc(
.clk(clk),
.rst(rst),
.nce(nce),
.are(are),
.awe(awe),
.data(data),
.addr(addr)
);
// Initialize Value
initial
begin
#0 temp <= 0;
#0 il[00] <= 12'd70;
#0 il[01] <= 12'd72;
#0 il[02] <= 12'd70;
#0 il[03] <= 12'd70;
#0 il[04] <= 12'd72;
#0 il[05] <= 12'd68;
#0 il[06] <= 12'd68;
#0 il[07] <= 12'd64;
#0 il[08] <= 12'd103;
#0 il[09] <= 12'd101;
#0 il[10] <= 12'd103;
#0 il[11] <= 12'd100;
#0 il[12] <= 12'd99;
#0 il[13] <= 12'd97;
#0 il[14] <= 12'd94;
#0 il[15] <= 12'd94;
#0 il[16] <= 12'd132;
#0 il[17] <= 12'd132;
#0 il[18] <= 12'd132;
#0 il[19] <= 12'd130;
#0 il[20] <= 12'd129;
#0 il[21] <= 12'd129;
#0 il[22] <= 12'd125;
#0 il[23] <= 12'd121;
#0 il[24] <= 12'd157;
#0 il[25] <= 12'd157;
#0 il[26] <= 12'd155;
#0 il[27] <= 12'd154;
#0 il[28] <= 12'd153;
#0 il[29] <= 12'd150;
#0 il[30] <= 12'd148;
#0 il[31] <= 12'd145;
#0 il[32] <= 12'd168;
#0 il[33] <= 12'd163;
#0 il[34] <= 12'd164;
#0 il[35] <= 12'd162;
#0 il[36] <= 12'd163;
#0 il[37] <= 12'd161;
#0 il[38] <= 12'd161;
#0 il[39] <= 12'd156;
#0 il[40] <= 12'd172;
#0 il[41] <= 12'd170;
#0 il[42] <= 12'd165;
#0 il[43] <= 12'd166;
#0 il[44] <= 12'd163;
#0 il[45] <= 12'd163;
#0 il[46] <= 12'd162;
#0 il[47] <= 12'd158;
#0 il[48] <= 12'd174;
#0 il[49] <= 12'd170;
#0 il[50] <= 12'd167;
#0 il[51] <= 12'd167;
#0 il[52] <= 12'd164;
#0 il[53] <= 12'd163;
#0 il[54] <= 12'd164;
#0 il[55] <= 12'd159;
#0 il[56] <= 12'd174;
#0 il[57] <= 12'd173;
#0 il[58] <= 12'd170;
#0 il[59] <= 12'd167;
#0 il[60] <= 12'd167;
#0 il[61] <= 12'd166;
#0 il[62] <= 12'd166;
#0 il[63] <= 12'd160;
#0 iqnr[0] <= 12'h0ac;
#0 iqnr[1] <= 12'h034;
#0 iqnr[2] <= 12'he12;
#0 iqnr[3] <= 12'hf16;
#0 iqnr[4] <= 12'hff8;
#0 iqnr[5] <= 12'hffa;
#0 iqnr[6] <= 12'h00c;
#0 iqnr[7] <= 12'hff6;
#0 iqnr[8] <= 12'hffd;
#0 iqnr[9] <= 12'hfb0;
#0 iqnr[10] <= 12'hff2;
#0 iqnr[11] <= 12'hffb;
#0 iqnr[12] <= 12'h000;
#0 iqnr[13] <= 12'hffa;
#0 iqnr[14] <= 12'hffb;
#0 iqnr[15] <= 12'h004;
#0 iqnr[16] <= 12'h000;
#0 iqnr[17] <= 12'hffe;
#0 iqnr[18] <= 12'h002;
#0 iqnr[19] <= 12'hffb;
#0 iqnr[20] <= 12'hff4;
#0 iqnr[21] <= 12'hff7;
#0 iqnr[22] <= 12'h001;
#0 iqnr[23] <= 12'hffd;
#0 iqnr[24] <= 12'h001;
#0 iqnr[25] <= 12'hffe;
#0 iqnr[26] <= 12'hffa;
#0 iqnr[27] <= 12'hffc;
#0 iqnr[28] <= 12'h002;
#0 iqnr[29] <= 12'h002;
#0 iqnr[30] <= 12'hffe;
#0 iqnr[31] <= 12'h003;
#0 iqnr[32] <= 12'h001;
#0 iqnr[33] <= 12'hffe;
#0 iqnr[34] <= 12'hffe;
#0 iqnr[35] <= 12'hff9;
#0 iqnr[36] <= 12'hffa;
#0 iqnr[37] <= 12'hffe;
#0 iqnr[38] <= 12'hfff;
#0 iqnr[39] <= 12'hffe;
#0 iqnr[40] <= 12'h001;
#0 iqnr[41] <= 12'hffd;
#0 iqnr[42] <= 12'h001;
#0 iqnr[43] <= 12'h000;
#0 iqnr[44] <= 12'hffc;
#0 iqnr[45] <= 12'hffe;
#0 iqnr[46] <= 12'hfff;
#0 iqnr[47] <= 12'h002;
#0 iqnr[48] <= 12'hffe;
#0 iqnr[49] <= 12'h002;
#0 iqnr[50] <= 12'hffc;
#0 iqnr[51] <= 12'hfff;
#0 iqnr[52] <= 12'hffd;
#0 iqnr[53] <= 12'hfff;
#0 iqnr[54] <= 12'h003;
#0 iqnr[55] <= 12'hffb;
#0 iqnr[56] <= 12'hffd;
#0 iqnr[57] <= 12'hffe;
#0 iqnr[58] <= 12'h002;
#0 iqnr[59] <= 12'hffd;
#0 iqnr[60] <= 12'hffd;
#0 iqnr[61] <= 12'hffd;
#0 iqnr[62] <= 12'h000;
#0 iqnr[63] <= 12'h002;
#0 irle[0] <= 12'h005;
#0 irle[1] <= 12'h002;
#0 irle[2] <= 12'hfeb;
#0 irle[3] <= 12'hff8;
#0 irle[4] <= 12'h000;
#0 irle[5] <= 12'h000;
#0 irle[6] <= 12'h000;
#0 irle[7] <= 12'h000;
#0 irle[8] <= 12'h000;
#0 irle[9] <= 12'hffd;
#0 irle[10] <= 12'h000;
#0 irle[11] <= 12'h000;
#0 irle[12] <= 12'h000;
#0 irle[13] <= 12'h000;
#0 irle[14] <= 12'h000;
#0 irle[15] <= 12'h000;
#0 irle[16] <= 12'h000;
#0 irle[17] <= 12'h000;
#0 irle[18] <= 12'h000;
#0 irle[19] <= 12'h000;
#0 irle[20] <= 12'h000;
#0 irle[21] <= 12'h000;
#0 irle[22] <= 12'h000;
#0 irle[23] <= 12'h000;
#0 irle[24] <= 12'h000;
#0 irle[25] <= 12'h000;
#0 irle[26] <= 12'h000;
#0 irle[27] <= 12'h000;
#0 irle[28] <= 12'h000;
#0 irle[29] <= 12'h000;
#0 irle[30] <= 12'h000;
#0 irle[31] <= 12'h000;
#0 irle[32] <= 12'h000;
#0 irle[33] <= 12'h000;
#0 irle[34] <= 12'h000;
#0 irle[35] <= 12'h000;
#0 irle[36] <= 12'h000;
#0 irle[37] <= 12'h000;
#0 irle[38] <= 12'h000;
#0 irle[39] <= 12'h000;
#0 irle[40] <= 12'h000;
#0 irle[41] <= 12'h000;
#0 irle[42] <= 12'h000;
#0 irle[43] <= 12'h000;
#0 irle[44] <= 12'h000;
#0 irle[45] <= 12'h000;
#0 irle[46] <= 12'h000;
#0 irle[47] <= 12'h000;
#0 irle[48] <= 12'h000;
#0 irle[49] <= 12'h000;
#0 irle[50] <= 12'h000;
#0 irle[51] <= 12'h000;
#0 irle[52] <= 12'h000;
#0 irle[53] <= 12'h000;
#0 irle[54] <= 12'h000;
#0 irle[55] <= 12'h000;
#0 irle[56] <= 12'h000;
#0 irle[57] <= 12'h000;
#0 irle[58] <= 12'h000;
#0 irle[59] <= 12'h000;
#0 irle[60] <= 12'h000;
#0 irle[61] <= 12'h000;
#0 irle[62] <= 12'h000;
#0 irle[63] <= 12'h000;
#0 ihuff[0] <= 12'h003;
#0 ihuff[1] <= 12'h002;
#0 ihuff[2] <= 12'h005;
#0 ihuff[3] <= 12'h004;
#0 ihuff[4] <= 12'h052;
#0 ihuff[5] <= 12'h000;
#0 clk <= 1'b0;
#0 rst <= 1'b0;
#0 nce <= 1'b1;
#0 are <= 1'b1;
#0 awe <= 1'b1;
#0 din <= 13'h0;
#0 addr<= 4'h0;
#0 lc <= 1'b0;
#0 stop <= 1'b0;
#17 rst <= 1'b1;
// Wait awhile
repeat(150)@(posedge clk);
// Just for timing sims
nce <= 1'b0;
din <= 0;
#10 awe <= 1'b0;
#50 awe <= 1'b1;
nce <= 1'b1;
// Tests Luminance
test_addr0; // fdct -> huff
// Just for timing sims
nce <= 1'b0;
din <= 0;
#10 awe <= 1'b0;
#50 awe <= 1'b1;
#50 are <= 1'b0;
#50 are <= 1'b1;
#40 are <= 1'b0;
#40 are <= 1'b1;
nce <= 1'b1;
repeat(20)@(posedge clk);
test_addr4; // qnr -> huff
// Just for timing sims
nce <= 1'b0;
din <= 0;
#10 awe <= 1'b0;
#50 awe <= 1'b1;
#10 are <= 1'b0;
#50 are <= 1'b1;
nce <= 1'b1;
repeat(20)@(posedge clk);
test_addr8; // rle -> huff
// Just for timing sims
nce <= 1'b0;
din <= 0;
#10 awe <= 1'b0;
#50 awe <= 1'b1;
#10 are <= 1'b0;
#50 are <= 1'b1;
nce <= 1'b1;
repeat(20)@(posedge clk);
test_addrC; // huff -> huff
$stop;
end
task test_addr0;
begin
addr <= 4'h0;
// Write Data
for(i=0; i<64; i=i+1)
begin
nce <= 1'b0;
din <= {lc,(il[i]-12'd128)};
#10 awe <= 1'b0;
#50 awe <= 1'b1;
nce <= 1'b1;
end
// Read Data
while(!stop)
begin
nce <= 1'b0;
#10 are <= 1'b0;
#40 stop <= data[22] & data[21];
if(data[22] && data != temp) $display("DOUT = %x",data);
temp = data;
#50 are <= 1'b1;
end
stop <= 1'b0;
repeat(100)@(posedge clk);
end
endtask
task test_addr4;
begin
addr <= 4'h4;
// Write Data
for(i=0; i<64; i=i+1)
begin
nce <= 1'b0;
din <= {lc,iqnr[i]};
#10 awe <= 1'b0;
#50 awe <= 1'b1;
nce <= 1'b1;
end
// Read Data
while(!stop)
begin
nce <= 1'b0;
#10 are <= 1'b0;
#40 stop <= data[22] & data[21];
if(data[22]) $display("DOUT = %x",data);
#50 are <= 1'b1;
end
stop <= 1'b0;
repeat(100)@(posedge clk);
end
endtask
task test_addr8;
begin
addr <= 4'h8;
for(i=0; i<64; i=i+1)
begin
nce <= 1'b0;
din <= {lc,irle[i]};
#10 awe <= 1'b0;
#50 awe <= 1'b1;
nce <= 1'b1;
end
// Read Data
while(!stop)
begin
nce <= 1'b0;
#10 are <= 1'b0;
#40 stop <= data[22] & data[21];
if(data[22]) $display("DOUT = %x",data);
#50 are <= 1'b1;
end
stop <= 1'b0;
repeat(100)@(posedge clk);
end
endtask
task test_addrC;
begin
addr <= 4'hC;
for(i=0; i<6; i=i+1)
begin
nce <= 1'b0;
din <= {lc,ihuff[i]};
#10 awe <= 1'b0;
#50 awe <= 1'b1;
nce <= 1'b1;
end
// Read Data
while(!stop)
begin
nce <= 1'b0;
#10 are <= 1'b0;
#40 stop <= data[22] & data[21];
if(data[22]) $display("DOUT = %x",data);
#50 are <= 1'b1;
end
stop <= 1'b0;
repeat(100)@(posedge clk);
end
endtask
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -