📄 memdev.v
字号:
module MEMDEV(clk, a_read, a_read_reg, d_read, d_write, w, r, dmem_wait, ram_dout, ram_wait, ram_w, ram_r, ram_addr, ram_din, dev_dout, dev_rdyr, dev_rdyw, dev_w, dev_r, dev_din, dev_wdata, dev_waddr, dev_rcv_eop, dev_send_eop); input clk; wire clk; input [31:0] a_read; wire [31:0] a_read; input [31:0] a_read_reg; wire [31:0] a_read_reg; output [31:0] d_read; reg [31:0] d_read; input [31:0] d_write; wire [31:0] d_write; input [1:0] w; wire [1:0] w; input [1:0] r; wire [1:0] r; output dmem_wait; reg dmem_wait; input [31:0] ram_dout; wire [31:0] ram_dout; input ram_wait; wire ram_wait; output [1:0] ram_w; reg [1:0] ram_w; output [1:0] ram_r; reg [1:0] ram_r; output [31:0] ram_addr; reg [31:0] ram_addr; output [31:0] ram_din; reg [31:0] ram_din; input [31:0] dev_dout; wire [31:0] dev_dout; input dev_rdyr; wire dev_rdyr; input dev_rdyw; wire dev_rdyw; output dev_w; reg dev_w; output dev_r; reg dev_r; output [31:0] dev_din; reg [31:0] dev_din; output dev_wdata; reg dev_wdata; output dev_waddr; reg dev_waddr; input dev_rcv_eop; wire dev_rcv_eop; output dev_send_eop; reg dev_send_eop; reg [31:0] dev_buffer; reg bufw; reg sending; reg n_sending; reg dev_select; reg reg_dev_select; reg addr; reg addr_reg; reg send; reg eop; reg [1:0] __tmp61; reg [1:0] __tmp62; reg wr; reg rd; reg s; reg r__1; reg [31:0] status; reg [31:0] __tmp64; reg [31:0] __tmp63; always @(posedge clk) begin : buffer if (bufw) dev_buffer <= dev_dout; sending <= n_sending; end always @(a_read or a_read_reg or d_write or w or r or sending or ram_dout or ram_wait or dev_rdyw or dev_rdyr or dev_buffer or dev_rcv_eop) begin : memdev_process dev_select = a_read[5'b11111] == 1; reg_dev_select = a_read_reg[5'b11111] == 1; addr = a_read[5'b00010] == 1; addr_reg = a_read_reg[5'b00010] == 1; send = d_write[5'b10001] == 1; eop = d_write[5'b10100] == 1; ram_addr = a_read; ram_din = d_write; if (!dev_select) __tmp61 = w; else __tmp61 = 2'b00; ram_w = __tmp61; if (!dev_select) __tmp62 = r; else __tmp62 = 2'b00; ram_r = __tmp62; bufw = dev_select; dev_din = d_write; wr = dev_select && w[1'b0] != 0; rd = dev_select && r[1'b0] != 0; s = wr && send && addr; r__1 = rd && !addr; dev_w = s; dev_r = r__1; dev_send_eop = s && eop; dev_wdata = wr && !addr; dev_waddr = wr && addr; n_sending = s || sending && !dev_rdyw; status = 32'b00000000000000000000000000000000; status[5'b10000] = dev_rdyr; status[5'b10010] = !sending; status[5'b10011] = dev_rcv_eop; if (reg_dev_select) begin if (addr_reg) __tmp64 = status; else __tmp64 = dev_buffer; __tmp63 = __tmp64; end else __tmp63 = ram_dout; d_read = __tmp63; dmem_wait = !reg_dev_select && ram_wait; endendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -