OpenCores
URL https://opencores.org/ocsvn/yacc/yacc/trunk

Subversion Repositories yacc

[/] [yacc/] [trunk/] [bench/] [verilog/] [yacc_test.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tak.sugawa
//YACC Test Bench
2
//Apr.5.2005 Tak.Sugawara
3
 
4
`include "define.h"
5
`timescale 1ns/1ps
6
 
7
module yacc_test;
8
        reg clock=0;
9
        reg Reset=0;
10
        reg int_req_usr=0;
11
        reg RXD=1'b1;
12
        wire TXD;
13
        wire [31:0] mem_data_w;
14
        wire mem_write;
15
        wire [15:0] mem_address;
16
        always #10 clock=~clock;
17
 
18
 
19
 
20
        initial begin
21
        //      $dumpfile("yacc_test.vcd");
22
        //      $dumpvars(3,yacc_test.cpu.d1.ram,yacc_test.RXD);
23
                Reset=0;
24
                #800 Reset=1;
25
        end
26
 
27
`ifdef RTL_SIMULATION
28
 yacc cpu(.clock(clock),.Async_Reset(Reset),.MemoryWData(mem_data_w),
29
                  .MWriteFF(mem_write),
30
                  .data_port_address(mem_address),.RXD(RXD),.TXD(TXD));
31
`else
32
        yacc cpu(.clock(clock),.Async_Reset(Reset),        .RXD(RXD),.TXD(TXD));
33
 
34
`endif
35
 
36
 
37
 
38
 
39
 
40
 
41
 
42
 
43
        task Cprint;// String OUT until the byte 00 or xx detected with least Byte first and justified.
44
                integer i;
45
                begin :Block
46
                        i=0;
47
                        while (1) begin
48
                                if (char_buffer[i*8 +:8] ===8'h00 || char_buffer[i*8 +:8]===8'hxx) begin
49
                                                disable Block;
50
                                end
51
                                $write("%c",char_buffer[i*8 +:8]);
52
                                i=i+1;
53
                        end
54
                end
55
        endtask
56
 
57
   reg [0:640*2-1] char_buffer;
58
   integer  counter=0;
59
   always @ (posedge clock ) begin
60
            if ((mem_write === 1'b1)) begin
61
                   if (mem_address==`Print_Port_Address) begin
62
                                if (mem_data_w[7:0]===8'h00) begin
63
                                        char_buffer[counter*8 +:8]=mem_data_w[7:0];
64
                                        if (char_buffer[0  +:8*7]==="$finish") begin
65
                                                        $stop;
66
 
67
                                        end else if (char_buffer[0  +:8*5]==="$time") begin
68
                                                        $display("Current Time on Simulation=%d",$time);
69
 
70
                                        end else  Cprint;//$write("%s",char_buffer);
71
 
72
                                        for (counter=0; counter< 80*2; counter=counter+1) begin
73
                                                char_buffer[counter*8 +:8]=8'h00;
74
                                        end
75
                                        counter=0;
76
 
77
                                end else begin
78
                                        char_buffer[counter*8 +:8]=mem_data_w[7:0];
79
                                        counter=counter+1;
80
                                end
81
                   end
82
           else if (mem_address==`Print_CAHR_Port_Address) begin
83
                                $write("%h ",mem_data_w[7:0]);
84
                   end else if (mem_address==`Print_INT_Port_Address) begin
85
                                $write("%h ",mem_data_w[15:0]);//Little Endian 
86
                   end else if (mem_address==`Print_LONG_Port_Address) begin
87
                                $write("%h ",mem_data_w[31:0]);//Big Endian
88
                   end
89
        end //if
90
   end //always
91
 
92
 
93
//uart read port
94
  wire [7:0] buffer_reg;
95
  wire int_req;
96
  reg sync_reset;
97
  integer i=0;
98
  localparam LF=8'h0a;
99
        always @(posedge clock, negedge Reset) begin
100
                if (!Reset) sync_reset <=1'b1;
101
                else sync_reset<=1'b0;
102
        end
103
 
104
 
105
 
106
   uart_read   uart_read_port( .sync_reset(sync_reset), .clk(clock), .rxd(TXD),.buffer_reg(buffer_reg), .int_req(int_req));
107
 
108
        always @(posedge int_req) begin
109
                begin :local
110
 
111
                        reg [7:0] local_mem [0:1000];
112
 
113
 
114
                        if (i>=1000) $stop;//assert(0);
115
 
116
                        if (buffer_reg==LF) begin :local2 //pop stack
117
                                integer j;
118
                                j=0;
119
                                while( j < i) begin
120
                                        $write( "%c",local_mem[j]);
121
                                        j=j+1;
122
                                end
123
                                $write("     : time=%t\n",$time);
124
                                i=0;//clear stack        
125
                        end else begin//push stack
126
 
127
                                local_mem[i]=buffer_reg;
128
                                i=i+1;
129
                         end
130
                end
131
 
132
        end
133
endmodule
134
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.