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