Я был поражен в этот момент в течение довольно долгого времени и действительно помог бы мне, если кто-то сможет изучить это и решить его. В систему входят 4 входа - w, a, b, c. Все это периодические входы, которые меняются со временем. Выходной сигнал равен o. Все они хранятся как подписанные 16-битные регистры. Когда w меньше 16'b0000101100110011, выход (o) равен «a». Когда w больше этого, выход изменяется на «b», но это происходит во время пересечения нуля c, то есть когда оно идет от положительного к отрицательному или наоборот. Таким образом, даже если w больше указанного выше значения, но c не пересекало его пересечение нуля, выход «o» будет оставаться «a». Я пытаюсь увидеть значение MSB 'c'. Как только он меняет свое значение, я пытаюсь изменить выход из «а» до «б», но это не происходит в соответствии с данным кодом:Задержка цикла в Verilog
module trial(clk, w, a, b, c, o
);
input clk;
input signed [15:0] w;
input signed [15:0] a;
input signed [15:0] b;
input signed [15:0] c;
output signed [15:0] o;
reg signed [15:0] temp;
reg signed [15:0] temp1;
reg signed [15:0] temp2;
always @(posedge clk)
begin
if (w<16'b0000101100110011)
begin
temp = a;
end
else
begin
temp1 = 0;//Initializing the value of temp1
temp2 = 0;//Initializing the value of temp2
while (temp1 == temp2)
begin
temp1 = c[15];// storing the sign bit of input 'c'
repeat(1) @(posedge clock);// one clock cycle delay command (##1 was not working)
temp2 = c[15];//storing the sign bit of input 'c' after one clock cycle
end
temp = b;
end
end
assign o = temp;
endmodule
Выходной сигнал изменяется от «» до «б «мгновенно, когда« w »становится больше, чем 16'b0000101100110011. Он не ждет перехода нуля с 'c'. Может ли кто-нибудь указать, есть ли какая-то ошибка и, вероятно, решение. Благодаря
Post код TestBench. Отредактируйте свой код правильно. – toolic