语法错误:匹配开始/结束

时间:2015-04-07 09:58:00

标签: verilog

module booth(num1,num2,prod);

input [22:0] num1,num2;
output [45:0] prod;
reg [22:0]num1_bar;
reg [46:0]sub_1;
reg [22:0]temp;
reg [22:0]result;
reg [1:0]sel;
reg [22:0]add;
reg [22:0]zeros;

assign temp = ~ num1;
assign num1_bar = temp + "00000000000000000000001";
assign sub_1 = {zeros[22:0], num2, "0"};

integer i;
always @* begin
    for( i = 0; i < 22; i = i+1) begin
        assign sel = sub_1[1:0];
        if(sel == "10") begin
            assign add = sub_1[46:24] + num1_bar;
            assign sub_1 ={add[22],add,sub_1[23:1]};
        end
        elseif(sel == "01") begin
            assign add = sub_1[46:24] + num1 ;
            assign sub_1 ={add[22],add,sub_1[23:1]};
        end
        else begin
            assign sub_1= {sub_1[46] ,sub_1[46:1]};
        end
    end

endmodule

我正在尝试使用进位前瞻加法器和展位乘法器来实现浮点乘法器。运行上面的代码后,只有摊位乘数发生错误。 请帮帮我。

错误:

  

摘要2015年4月7日星期二15:25:28

     
     

摘要新   ERROR ProjectMgmt:806 - &#34; D:/ XILINX PROGRAM / bth / booth.v&#34;第45行。&#34;开始&#34;附近的语法错误。       ERROR ProjectMgmt:806 - &#34; D:/ XILINX PROGRAM / bth / booth.v&#34;第49行。&#34; else&#34;附近的语法错误。       ERROR ProjectMgmt:806 - &#34; D:/ XILINX PROGRAM / bth / booth.v&#34;第54行。&#34; endmodule&#34;附近的语法错误。       INFO ProjectMgmt:1845 - 分析Verilog文件&#34; D:/ XILINX PROGRAM / bth / booth.v&#34;进入图书馆工作

2 个答案:

答案 0 :(得分:0)

您错过了与end区块的begin匹配的always

(修复后,您会发现还有其他错误。请参阅mcleod_ideafix的答案。)

答案 1 :(得分:0)

你似乎在VHDL和Verilog之间存在混淆。

  • Verilog中的向量常量采用以下形式:Y'zXXXXXXX其中Y是向量的位数,z是基数(b二进制,d表示十进制,h表示十六进制),XXXX是指定基数中的constante值。

  • else if必须分开

例如,行:

if(sel == "10") begin

必须改写为:

if(sel == 2'b10) begin

对于大型向量,可以省略大小说明符,并将常量写为:

assign num1_bar = temp + 'b00000000000000000000001;