Verilog错误:不支持在多个单边下进行分配

时间:2019-04-23 16:11:56

标签: verilog

当我想创建一个类似电梯的程序项目时,无论我做什么编辑模块,它总是说:“不支持在多个单边下进行分配”。

一些变量: tar_floor:用户输入,目标楼层; cur_floor:当前所在的楼层; clk_cnt:变量每次加1进行计数。

always @(posedge clk or posedge clr) begin

if(clr)
begin
    cur_floor = 0; //if clear button pressed,clear all statement
    tar_floor=0;
    upordown=0; 
    clk_cnt=0;
    ryg=3'b001; //green
    rgb=3'b111;
end

if(tar_floor==cur_floor) //nothing to do
begin
    clk_cnt=0;
    upordown=0; 
    clk_cnt=0;
    ryg=3'b001; //green
    rgb=3'b111;
end
else 
begin//when up or down  
    clk_cnt = clk_cnt +1;
    if (tar_floor>cur_floor)
    begin
        ryg=3'b100;//red
        if (clk_cnt[27])
            rgb=rgb+1;
        if(clk_cnt[28])
        begin
            if (cur_floor<=6)
                cur_floor=cur_floor+1;
        end
    end

    if (tar_floor<cur_floor)
    begin
        ryg=3'b010;//yello
        if (clk_cnt[27])
            rgb=rgb+1;
        if(clk_cnt[28])
        begin
            if (cur_floor>=1)
                cur_floor=cur_floor-1;
        end
    end
end
end

wire tmp=cur_floor;
mytask_sub A1(.a_to_g(a_to_g),.cur_floor(tmp));//call show sub modudle

endmodule

在“ clk_cnt = clk_cnt +1;”处它说:“不支持在多个单一边缘下进行分配以进行综合”,但是我对verilog还是陌生的,因此我尝试像Cplusplus一样对其进行编辑。 我寻找了一些答案,说开始和结束都没有进行,但这对我来说不是事实,请帮助我解决此错误。

1 个答案:

答案 0 :(得分:2)

综合要求您像这样构造代码:

always @(posedge clk or posedge clr)
    if(clr)
       // asynchronous statement when clr rises 
       // and any clk rising edge while clr is true
    else
       // synchronous statement when clk rises and clr is false

您缺少else子句