tachibana/test_bench/term_emu_tb.v

77 lines
No EOL
1.5 KiB
Verilog

`timescale 1ns / 1ps
module term_emu_tb();
parameter GLYPHMEM_W = 256; /* glyphs */
parameter GLYPHMEM_H = 128; /* glyphs */
localparam period = 4;
reg clk, rst;
reg in_byte_valid;
reg [7:0] in_byte;
wire in_byte_ack;
wire glyph_buffer_w_valid;
wire [15:0] glyph_buffer_w_addr;
wire [19:0] glyph_buffer_w_data;
reg [19:0] glyph_buffer;
initial begin
rst = 1;
clk = 0;
repeat(2) #period clk = ~clk;
rst = 0;
forever #period clk = ~clk;
end
`include "test_data/00TEMU_TEST_STR_LOADERS.v"
integer testcase_id;
integer read_pos;
initial begin
`include "test_data/00TEMU_TEST_STR_RUNNERS.v"
$finish;
end
reg [19:0] glyphmem [0:GLYPHMEM_W*GLYPHMEM_H-1];
reg last_rst;
always @(posedge clk) begin
last_rst <= rst;
if (~last_rst && rst) begin
for (integer i=0; i<GLYPHMEM_W*GLYPHMEM_H; i=i+1) begin
glyphmem[i] = 20'h00000;
end
end else begin
if (glyph_buffer_w_valid) begin
if (glyph_buffer_w_addr < GLYPHMEM_W*GLYPHMEM_H) begin
glyphmem[glyph_buffer_w_addr] <= glyph_buffer_w_data;
end else begin
$display("Glyph memory write access out of bounds");
$finish();
end
end
end
end
term_emu #(
.GLYPHMEM_W(GLYPHMEM_W),
.GLYPHMEM_H(GLYPHMEM_H)
) term_emu_dut (
.clk(clk), .rst(rst),
.in_byte_valid(in_byte_valid),
.in_byte(in_byte),
.in_byte_ack(in_byte_ack),
.glyph_buffer_w_valid(glyph_buffer_w_valid),
.glyph_buffer_w_addr(glyph_buffer_w_addr),
.glyph_buffer_w_data(glyph_buffer_w_data)
);
endmodule