小编Ant*_*ony的帖子

为什么 If 语句会导致 verilog 中的锁存?

我正在尝试在 Verilog 中编写控制器/数据路径实现,但我对什么会导致不需要的锁存感到困惑。本质上,我有一个在 negedge 时钟上更新的状态机。该状态机根据机器所处的状态向数据路径发送 5 个控制信号(loadSquare、loadDelta、addDelta 等)。数据路径和控制器的代码如下所示。

数据路径

//Control lines
reg addSquare, addDelta, decDelta;
reg loadSquare, loadDelta;

//Input lines
reg [8:0] square, delta;

//Output register
reg [7:0] outReg;

always @(posedge clk) begin
  if (loadSquare)
     square = 9'h1;  //used on initialization

  if (loadDelta)
     delta = 9'h3;   //used on initialization

  if (addSquare)
     square = square + delta; 

  if (addDelta)
     delta = delta + 2'h2;

  if (decDelta)
     outReg = (delta>>1) - 1;  //used for output
  else
     outReg = Input;
end
Run Code Online (Sandbox Code Playgroud)

控制器

//Output …
Run Code Online (Sandbox Code Playgroud)

verilog fpga xilinx

5
推荐指数
1
解决办法
6979
查看次数

标签 统计

fpga ×1

verilog ×1

xilinx ×1