以下是我在用于XST的verilog中编写的代码的片段。日志中充满了错误。我该如何更正代码?我如何以及在何处使用always@()
和@()
块?我在哪里使用阻止和非阻塞分配?
input wire CLOCK;
input wire [31:0] OUT_SQRT;
output wire [31:0] IN_SQRT;
input wire [31:0] RANDP;
integer randp;
integer flagp;
integer sqrootp;
integer check_primep;
always @(posedge CLOCK and flagp != 0)
begin
#10
@(posedge and flagp != 0 )
begin
flagp = sqrootp%check_primep;
if(flagp != 0 and check_primep < sqrootp)
begin
check_primep = check_primep + 1;
end
@(posedge and flagp == 0)
begin
flagp = 1;
check_primep = 2;
randp = RANDP;
#5
IN_SQRT = randp;
#10
sqrootp = OUT_SQRT;
end
end
答案 0 :(得分:0)
使用以下隐含的触发器:
always @(posedge clk) begin
flip_flop_q <= flip_flop_d;
end
使某些事情同步(在时钟上采样)启用:
always @(posedge clk) begin
if (flagp != 0) begin
flip_flop_q <= flip_flop_d;
end
end
使用以下隐含组合逻辑:
always @* begin
comb_logic = a + b;
end
以下内容(延迟)无法合成:
#10
@(posedge and flagp != 0 ) // no always just a delay waiting for criteria
通常在测试工具中用于等待重置等信号被释放。
initial begin
@(posedge reset_n);
@(posedge clk);
@(posedge clk);
//begin test procedure
end
如果你需要在可合成的verilog中等待信号,你需要建立一个FSM(有限状态机)来对你的逻辑进行排序。
答案 1 :(得分:0)