gpt4 book ai didi

module - verilog 模块中一个周期的奇怪延迟

转载 作者:行者123 更新时间:2023-12-02 00:02:25 24 4
gpt4 key购买 nike

我是 verilog 和数字电路的初学者,我对下面的代码有一个疑问。在这段代码中,我制作了一个状态机,将“reg”中的值保存到 verilog 中的另一个模块中。我制作这段代码只是为了解释我的疑问:

//STATE MACHINE

module RegTest(clk,enable,reset, readData1_out);


parameter State1 = 0;
parameter State2 = 1;
parameter State3 = 2;
parameter State4 = 3;
parameter State5 = 4;
parameter State6 = 5;
parameter State7 = 6;
parameter State8 = 7;
parameter State9 = 8;
parameter State10 = 9;
parameter Beg = 10;
input clk, enable, reset;
output readData1_out;



wire clk,enable, reset;
reg[5:0] State;
reg writeEn ;
reg [15:0] writeData;
wire [15:0] readData1;
wire writeEn_out = writeEn;


RegFile registrador_component (
.dataIn(writeData),
.dataOut(readData1),
.clock(clk),
.writeEnable(writeEn)
);

defparam
registrador_component.WIDTH = 16;



always @(posedge clk or posedge reset) begin

if (reset)
begin
State = Beg;
end else begin
case (State)

Beg:
begin
State = State1;
end

State1:
begin
writeEn = 1 ;
writeData = 10;
State = State2;
end

State2:
begin
writeEn = 0 ;
State = State3;
end


State3:
begin
writeEn = 1;
writeData = readData1 + 10;
State = State4;
end

State4:
begin
writeEn = 0 ;
State = State5;
end

State5:
begin
writeEn = 1 ;
writeData = readData1 + 10;
State = State6;
end

State6:
begin
writeEn = 0 ;
State = State7;
end

State7:
begin
writeEn = 1 ;
writeData = readData1 + 10;
State = State8;
end

State8:
begin
writeEn = 0 ;
State = State9;
end




endcase
end

end

endmodule





//Example of a register file

module RegFile(clock, writeEnable, dataIn, dataOut);
parameter WIDTH = 16;
input clock, writeEnable;
input [WIDTH-1 : 0] dataIn;
output [WIDTH-1 : 0] dataOut;
wire [WIDTH-1 : 0] dataOut;
reg [WIDTH-1 : 0] wha;

assign dataOut = wha;

always@( posedge clock)
begin
if (writeEnable)
wha = dataIn;
end
endmodule

我的疑问是,为什么我需要等待 1 个周期才能获取存储在 RegFile 中的值?例如,为什么我不能跳过 State2?

最佳答案

您在上面编写的代码中确实有 2 个时钟周期的延迟。如果您对此进行模拟以便亲眼看到,那将会有所帮助,但我将对其进行描述。

在第一个周期,WriteEnable 变高。它需要 1 个完整的时钟周期才能对逻辑的其他部分有效。因此,在第一个 时钟周期完成后,WriteEnable 将可用于其他地方。

在第二个周期,您的 regFile 模块可以“看到”之前 WriteEnable 变高的事实。然后它将 dataIn 放入 wha 信号,该信号被传递给 dataOut。因此,在第二个 时钟周期完成后,dataOut 将可用于其他地方。 (它在状态 3 的第三个时钟周期使用)。

这就是您需要进入状态 2 的原因。状态 2 允许 RegFile 注册输出数据所需的 1 个额外时钟周期。

时钟周期延迟是一个需要理解的极其重要的概念,因此最好在您还是新手的时候投入时间来完全掌握它。

有关更多信息,请参阅此处的本教程,它解释了寄存器和时钟周期延迟,对您很有用。 Clock Cycle Delays and Registered Logic

关于module - verilog 模块中一个周期的奇怪延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com