Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns/100ps
  2.  
  3.  
  4. module tb;
  5.  
  6.     reg clk;
  7.     reg f1,f2;
  8.     reg reset;
  9.  
  10.     int cnt=0;
  11.  
  12.  
  13.  
  14.     wire [15:0] addr;
  15.     trireg [ 7:0] data;
  16.  
  17.     wire sync,dbin,wr_n;
  18.  
  19.  
  20.  
  21.  
  22.     initial
  23.     begin
  24.         clk = 1'b1;
  25.  
  26.         forever
  27.         begin
  28.             #(0.5);
  29.             clk = ~clk;
  30.         end
  31.     end
  32.  
  33.  
  34.  
  35.     always @(posedge clk)
  36.     begin
  37.         cnt++;
  38.         if(cnt>=100) cnt=0;
  39.  
  40.         if( cnt==0 )
  41.             f1 <= 1'b1;
  42.         else
  43.             f1 <= 1'b0;
  44.  
  45.         if( cnt==50 )
  46.             f2 <= 1'b1;
  47.         else
  48.             f2 <= 1'b0;
  49.     end
  50.    
  51.  
  52.     initial
  53.     begin
  54.         reset = 1'b1;
  55.  
  56.         repeat(10) @(posedge f2);
  57.  
  58.         reset <= 1'b0;
  59.     end
  60.  
  61.  
  62.  
  63.  
  64.  
  65.     vm80a vm80a
  66.     (
  67.         .pin_clk  (clk),
  68.         .pin_f1   (f1),
  69.         .pin_f2   (f2),
  70.         .pin_reset(reset),
  71.         .pin_a    (addr),
  72.         .pin_d    (data),
  73.         .pin_hold (1'b0),
  74.         .pin_hlda (),
  75.         .pin_ready(1'b1),
  76.         .pin_wait (),
  77.         .pin_int  (1'b0),
  78.         .pin_inte (),
  79.         .pin_sync (sync),
  80.         .pin_dbin (dbin),
  81.         .pin_wr_n (wr_n)
  82.     );
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.     // simple ROM
  93.     reg [7:0] rom [0:15] =
  94.     '{
  95.         8'h31, //
  96.         8'h10, //
  97.         8'h80, // ld   sp,#8010
  98.  
  99.         8'h3e, //
  100.         8'h00, // ld   a,#00
  101.  
  102.         8'h06, //
  103.         8'h01, // ld   b,#01
  104.  
  105.         8'h90, // sub  b
  106.  
  107.         8'hf5, // push af
  108.  
  109.         8'h3e, //
  110.         8'h01, // ld   a,#01
  111.  
  112.         8'h06, //
  113.         8'h00, // ld   b,#00
  114.  
  115.         8'h90, // sub  b
  116.  
  117.         8'hf5, // push af
  118.  
  119.         8'h76  // halt
  120.     };
  121.  
  122.     assign data = (dbin && addr<16) ? rom[addr] : 8'hZZ;
  123.  
  124.  
  125.     // simple RAM
  126.     reg [7:0] ram [0:15];
  127.  
  128.     assign data = (dbin && addr>=32768) ? ram[addr[3:0]] : 8'hZZ;
  129.  
  130.     always @(posedge wr_n)
  131.     if( addr>=32768 )
  132.         ram[addr[3:0]] = data;
  133.  
  134.  
  135. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement