⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcst_tx.v

📁 ---简化版
💻 V
字号:
module mcst_tx
(
	input pci_rst_l,
	input pci_clk,                  // 发生器工作时钟
	input bk_ba0_l,                 // =0: enable to write data to fifo
	input wr_en_l,                  // =0: enable to write data to fifo
	input [31:0] pci_data,          // 计时缓存中输出的时间数据;
	input [10:0] pci_addr,          // 当前操作的缓存地址
	input clk_10K,                  // 发送驱动时钟
	output q,                       // 输出数据
	output reg [31:0] cmd,          // 命令寄存器
	output reg [31:0] tx_data       // 回显最后一次pci总线写出的数据
);

    /*    总线操作说明
        命令地址:0040
        命令定义: BIT    定义
                 32~4   保留未用 
                 3      清除接收FIFO中的数据(1有效)
                 2      中断使能(1有效)
                 1      接收功能禁止信号(1有效)
                 0      发送功能禁止信号(1有效)
    */
    
    wire we_command;  // ---------------------------------------命令寄存器写使能信号
    wire we_pci_data; // ---------------------------------------数据缓冲区写使能信号
    wire tx_a; // ----------------------------------------------发送数据 a
    wire [31:0] data; // ---------------------------------------数据缓存输出数据
    wire [3:0] addr; // ----------------------------------------准备处理数据的地址
                
    assign q = !cmd[0] ? tx_a : 1'b0; 
    
// 写命令、数据缓存: 使能信号
    // 0.00_00.00_00.00_00 --- 0000(000)
    assign we_command  = (!bk_ba0_l && !wr_en_l && (pci_addr[10:4] == 8'h0)) ? 1'b1 : 1'b0; 
    // 0.00_00.01_00.00_00 --- 0040(0010)
    assign we_pci_data = (!bk_ba0_l && !wr_en_l && (pci_addr[10:4] == 8'h1)) ? 1'b1 : 1'b0; 
        
    always @ (posedge pci_clk) begin // 保存控制命令
        if (!pci_rst_l) 
            cmd <= 32'b0;
        else if (we_command == 1'b1) 
            cmd <= pci_data;
        else
            cmd <= cmd;
            
        if (!pci_rst_l) 
            tx_data <= 32'b0;
        else if (we_pci_data == 1'b1) 
            tx_data <= pci_data;
        else
            tx_data <= tx_data;
    end 
        
mcst_tx_ram data_buf (
	.clock(pci_clk),
	.data(pci_data),
	.rdaddress(addr[3:0]),
	.wraddress(pci_addr[3:0]),
	.wren(we_pci_data),
	.q(data)
	);
                 
// ---------------- 单个数据发送处理模块 --------------------
mcst_tx_one tx_ctrl_ch1 (
	.pci_rst_l(pci_rst_l),  // in:  计算机系统复位信号
	.data(data),            // in:  待发送数据
	.clk(pci_clk),          // in:  计算机系统(pci)总线时钟33MHz
	.tx_clk(clk_10K),       // in:  发送时钟(10K)
	.addr(addr[3:0]),       // out: 准备发送数据的地址
	.q(tx_a)                // out: 输出的429总线数据A
	);


endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -