📄 mcst_tx.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 + -