mcst_rx.v
来自「---简化版」· Verilog 代码 · 共 46 行
V
46 行
module mcst_rx
(
input pci_rst_l,
input pci_clk, // pci bus clock;
input [10:7] addr, // pci bus address;
input bk_ba0_l, // active low : the address is a hit in base address 0
input data_read_l,
input clk_10K,
input mcst_data,
input [31:0] cmd,
input [31:0] tx_data,
output [31:0] data,
output irq_l
);
wire [31:0] value;
wire [31:0] status;
wire rx_mcst;
wire rdreq;
assign data = (addr[10:7] == 4'hF) ? value : // 1.1110.0000.0000 --- 1E00(780)
(addr[10:7] == 4'h2) ? tx_data: // 0.0100.0000.0000 --- 0400(100)
(addr[10:7] == 4'h1) ? status : // 0.0010.0000.0000 --- 0200(080)
(addr[10:7] == 4'h0) ? cmd : 32'hffffffff; // 0.0000.0000.0000 --- 0000(000)
`define pci_rd_valid (!bk_ba0_l && !data_read_l)
assign rdreq = ((addr[10:7] == 4'hF) && `pci_rd_valid) ? 1'b1 : 1'b0;
assign status[31:2] = 30'h0000_0000;
assign irq_l = cmd[2] ? status[0] : 1'b1; // (命令码为1,允许中断):当缓存中有数时,发出中断请求;
assign rx_mcst = cmd[1] ? 1'b0 : mcst_data;
mcst_rx_ctl receive_data (
.pci_rst_l(pci_rst_l), // 计算机系统复位信号
.clk(pci_clk), // PCI总线时钟(33MHz)
.clk_10K(clk_10K), // 10K参考时钟
.clear(cmd[3]), // 清除FIFO中所有数据
.rx_mcst(rx_mcst), // 曼彻斯特数据总线
.rdreq(rdreq), // 读FIFO数据请求
.data(value), // 从FIFO中读出的数据
.empty(status[0]), // = 1: data fifo is emtpy
.full(status[1])
);
endmodule
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?