寄存器写操作灵敏度

问题描述 投票:0回答:1

在一些微控制器的外设上,我们有写敏感和读敏感寄存器。例如串口有一个

TX
寄存器,对它们的写操作会触发一些动作。我想在 FPGA 上实现相同的行为。

我用输入reg

serial
制作了一个模块
TX
(输入真的可以是
reg
吗?),每次更改后都会强制其处于未定义状态,但我犯了一些错误。这是我的代码:

module serial #(
    parameter DATA_WIDTH = 8
)
(   
    input clk,
    input reg [DATA_WIDTH-1:0] TX
);
reg fifo_write_req = 0;

always @(TX) begin
    if (TX != {DATA_WIDTH{'x}})
    begin
        fifo_write_req <= 1;
    end
end

always @(negedge clk) begin
    fifo_write_req <= 0;
    TX <= {DATA_WIDTH{'x}}; // Illegal reference to net "TX".
end

我怎样才能达到期望的行为?

verilog
1个回答
0
投票

输入可以是reg吗?

不,输入不保留状态。
请参阅戴夫·里奇 (Dave Rich) 的Verilog 中的这些电线和寄存器有什么用


您正在尝试分配作为输入的变量 TX。
这会在编译时产生错误;该帖子无法在 EDA Playground 上的任何商业模拟器上编译。

改变

input reg [DATA_WIDTH-1:0] TX

output reg [DATA_WIDTH-1:0] TX

修复错误。

如果您不需要输出,也可以使用局部变量。


还有
建议不要以这种方式分配和检测 x 以用于综合工作流程。
在综合工作流程和模拟工作流程中分配和检测 x 的行为方式不同。 在 FPGA 综合工作流程中,分配和检测 x 很少有意义。 当尝试强制进行额外优化或类似的操作时,可能会在嵌套的

if
case
语句中。

© www.soinside.com 2019 - 2024. All rights reserved.