Subversion Repositories pentevo

Rev

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

  1. `include "../include/tune.v"
  2.  
  3. // Pentevo project (c) NedoPC 2011
  4. //
  5. // integrates sound features: tapeout, beeper and covox
  6.  
  7. module sound(
  8.  
  9.         input  wire       clk,
  10.  
  11.         input  wire [7:0] din,
  12.  
  13.  
  14.         input  wire       beeper_wr,
  15.         input  wire       covox_wr,
  16.  
  17.         input  wire       beeper_mux, // output either tape_out or beeper
  18.  
  19.  
  20.         output wire       sound_bit
  21. );
  22.  
  23.         reg [6:0] ctr;
  24.         reg [7:0] val;
  25.  
  26.         reg mx_beep_n_covox;
  27.  
  28.         reg beep_bit;
  29.         reg beep_bit_old;
  30.  
  31.         wire covox_bit;
  32.  
  33.  
  34.  
  35.  
  36.         always @(posedge clk)
  37.         begin
  38. /*              if( beeper_wr ) */
  39.                                 if( beeper_wr && (beep_bit!=beep_bit_old) )
  40.                         mx_beep_n_covox <= 1'b1;
  41.                 else if( covox_wr )
  42.                         mx_beep_n_covox <= 1'b0;
  43.         end
  44.  
  45.         always @(posedge clk) if( beeper_wr ) beep_bit_old <= beep_bit;
  46.  
  47.         always @(posedge clk)
  48.         if( beeper_wr )
  49.                 beep_bit <= beeper_mux ? din[3] /*tapeout*/ : din[4] /*beeper*/;
  50.  
  51.  
  52.         always @(posedge clk)
  53.         if( covox_wr )
  54.                 val <= din;
  55.  
  56.         always @(negedge clk)
  57.                 ctr <= ctr + 6'd1;
  58.  
  59.         assign covox_bit = ( {ctr,clk} < val );
  60.  
  61.  
  62.         bothedge trigger
  63.         (
  64.                 .clk( clk ),
  65.  
  66.                 .d( mx_beep_n_covox ? beep_bit : covox_bit ),
  67.  
  68.                 .q( sound_bit )
  69.         );
  70.  
  71.  
  72.  
  73. endmodule
  74.  
  75.  
  76.  
  77.  
  78. // both-edge trigger emulator
  79. module bothedge(
  80.  
  81.         input  wire clk,
  82.  
  83.         input  wire d,
  84.  
  85.         output wire q
  86.  
  87. );
  88.         reg trgp, trgn;
  89.  
  90.         assign q = trgp ^ trgn;
  91.  
  92.         always @(posedge clk)
  93.         if( d!=q )
  94.                 trgp <= ~trgp;
  95.  
  96.         always @(negedge clk)
  97.         if( d!=q )
  98.                 trgn <= ~trgn;
  99.  
  100. endmodule
  101.  
  102.