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 + -
显示快捷键?