Subversion Repositories ngs

Rev

Rev 118 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. // part of NeoGS flash programmer project (c) 2014 lvd^NedoPC
  2. //
  3. // reset controller
  4.  
  5. module reset
  6. (
  7.         input  wire clk_fpga,
  8.         input  wire clk_24mhz,
  9.  
  10.         input  wire init,
  11.         output reg  init_in_progress,
  12.  
  13.         output wire zxbus_rst_n,
  14.         output reg    rom_rst_n,
  15.         output reg    z80_rst_n,
  16.  
  17.         output reg  z80_busrq_n,
  18.         input  wire z80_busak_n
  19. );
  20.  
  21. parameter RST_CNT_SIZE = 8;
  22.  
  23.         reg [RST_CNT_SIZE:0] poweron_rst_cnt;
  24.         reg [RST_CNT_SIZE:0] rz_rst_cnt;
  25.  
  26.         wire poweron_rst_n = poweron_rst_cnt[RST_CNT_SIZE];
  27.  
  28.         wire rz_rst_n = rz_rst_cnt[RST_CNT_SIZE];
  29.  
  30.         reg z80_rst2;
  31.  
  32.         reg [1:0] z80_halted;
  33.  
  34.  
  35.         // make overall reset from poweron
  36.         //
  37.         initial
  38.                 poweron_rst_cnt <= 'd0;
  39.         //
  40.         always @(posedge clk_24mhz)
  41.         if( !poweron_rst_n )
  42.                 poweron_rst_cnt <= poweron_rst_cnt + 'd1;
  43.  
  44.  
  45.         // make zxbus reset
  46.         assign zxbus_rst_n = poweron_rst_n;
  47.  
  48.  
  49.         // make rom/z80 reset
  50.         //
  51.         always @(posedge clk_24mhz, negedge poweron_rst_n)
  52.         if( !poweron_rst_n )
  53.                 rz_rst_cnt <= 'd0;
  54.         else if( init )
  55.                 rz_rst_cnt <= 'd0;
  56.         else if( !rz_rst_n )
  57.                 rz_rst_cnt <= rz_rst_cnt + 'd1;
  58.  
  59.         // z80 reset
  60.         always @(posedge clk_fpga, negedge rz_rst_n)
  61.         if( !rz_rst_n )
  62.         begin
  63.                 z80_rst_n <= 1'b0;
  64.                 z80_rst2  <= 1'b0;
  65.         end
  66.         else
  67.         begin
  68.                 z80_rst_n <= z80_rst2;
  69.                 z80_rst2  <= 1'b1;
  70.         end
  71.  
  72.         // z80 busrq/busak
  73.         always @(posedge clk_fpga, negedge z80_rst_n)
  74.         if( !z80_rst_n )
  75.                 z80_busrq_n <= 1'b1;
  76.         else
  77.                 z80_busrq_n <= 1'b0;
  78.         //
  79.         always @(posedge clk_24mhz, negedge rz_rst_n)
  80.         if( !rz_rst_n )
  81.                 z80_halted <= 2'b00;
  82.         else
  83.                 z80_halted[1:0] <= {z80_halted[0], ~z80_busak_n};
  84.  
  85.  
  86.         // rom reset, init_in_progress
  87.         always @(posedge clk_24mhz, negedge rz_rst_n)
  88.         if( !rz_rst_n )
  89.         begin
  90.                 rom_rst_n        <= 1'b0;
  91.                 init_in_progress <= 1'b1;
  92.         end
  93.         else if( z80_halted[1] )
  94.         begin
  95.                 rom_rst_n        <= 1'b1;
  96.                 init_in_progress <= 1'b0;
  97.         end
  98.  
  99.  
  100. endmodule
  101.  
  102.