rom-fifo-ram的过程Verilog语言

module romtoled(
            input clk,                  //50MHz时钟
            input rst_n,              //复位信号,低电平有效      
              output fifofull,
              output fifoempty,
            output[7:0] led,
            output[7:0] ledin
                );

//-----------------------------------------------------------
reg[4:0] rom_addr;    //ROM输入地址
reg[7:0] cnt;
reg fifo_wren;        //FIFO写使能信号                                
reg fifo_rden;        //FIFO读使能信号
reg[3:0] ram_addr;
reg ram_wren;
wire[7:0] ram_dout;
//wire[7:0] ledin;  //ROM输出数据

//counter
always @(posedge clk or negedge rst_n)
if(!rst_n)  cnt <= 8'd0;
else if(cnt == 8'hff) cnt <= 8'h00;
else cnt <= cnt+1'b1;      

//rom to fifo
always@(posedge clk or negedge rst_n)
if(!rst_n) begin
    fifo_wren <= 1'b0;
    end
else if((cnt > 8'h01) && (cnt < 8'h0b))
begin
     fifo_wren <= 1'b1;
     fifo_rden <= 1'b0;
     rom_addr <= rom_addr + 1;
     end 
else if((cnt > 8'h11) && (cnt < 8'h1b))
begin 
     fifo_wren <= 1'b0;
     fifo_rden <= 1'b1;
     rom_addr <= 8'd0;
     ram_wren <= 1'b1;
     ram_addr <= ram_addr + 1'b1;
     end 
else begin
     fifo_wren <= 1'b0;
     fifo_rden <= 1'b0;
     rom_addr <= 8'd0;
     ram_wren <= 1'b0;
     end
     
romled romip (
  .clka(clk), // input clka
  .addra(rom_addr), // input [3 : 0] addra
  .douta(ledin) // output [7 : 0] douta
);

    romfifo fifoip (                            
      .clk(clk), // input clk                    
      .rst(!rst_n), // input rst                
      .din(ledin), // input [7 : 0] din            
      .wr_en(fifo_wren), // input wr_en            
      .rd_en(fifo_rden), // input rd_en            
      .dout(led), // output [7 : 0] dout        
      .full(full), // output full                
      .empty(empty) // output empty                
    );                                            


ramip toram (
  .clka(clk), // input clka    
  .wea(ram_wren), // input [0 : 0] wea    
  .addra(ram_addr), // input [3 : 0] addra    
  .dina(led), // input [7 : 0] dina    
  .douta(ram_dout) // output [7 : 0] douta    
);    
    
wire[35:0] CONTROL0;
wire[7:0] TRIG0;
romicon romledicon (
    .CONTROL0(CONTROL0) // INOUT BUS [35:0]
);

romledila romledila (
    .CONTROL(CONTROL0), // INOUT BUS [35:0]
    .CLK(clk), // IN
    .TRIG0(TRIG0) // IN BUS [7:0]
);

//assign TRIG0[0] = fifo_wren;
//assign TRIG0[1] = fifo_rden;
//assign TRIG0[2] = full;
//assign TRIG0[3] = empty;
  assign TRIG0[7:0] = ram_dout;    

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值