⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 经验总结.txt

📁 64位乘法器
💻 TXT
字号:
本程序设计在调试中出现了较多的问题应该引起重视:
 

   
line-data-ptosda.v中 37行的致命错误
always @ (posedge sclk or negedge rst)     // Bring the clock scl by way of sclk
   begin                                 //And the frequency of scl is half of sclk's 
      if (!rst)
          scl<=1;
      else
          scl<=~sclk;    !!!!!  正确应该为scl<=~scl;
   end
该错误的后果是导致scl的输出波形一直为1,不能实现对sclk的2分频
在模拟波形的时候将会出现错误!!!    注意在写分频程序的时候应该避免此类错误。


2)在line_data_singdate.v 中单词singdate 被写成sigdate,该错误导致在top文件中的   singdata mo(.sclk(sclk),.data(data),.d_ena(d_ena));
     语句中将出现未定义的错误。


3)为语法错误,在循环或条件语句中,应该让这些语句的头尾对应出现,是个好习惯
 
   否则在程序较长的时候可能会漏掉end语句。





** Error: E:/verilog/16_adder/main_programme.v(72): Undefined variable: b0.

错误之处 
always@(P[0]or G[0] or P[1] or G[1] or P[2] or G[2] or P[3] or 1‘b0)  always敏感变量中不应该有常数值
  begin
       CP[0]<=G[0]|(P[0]&1’b0);  此处1’b0 不多余  不应该存在 下同
       CP[1]<=G[1]|(P[1]&G[0])|(P[1]&P[0]&1’b0);
       CP[2]<=G[2]|(P[2]&G[1])|(P[2]&P[1]&G[0])|(P[2]&P[1]&P[0]&1’b0);




** Error: E:/verilog/16_adder/main_programme.v(73): near ")": syntax error
在上述错误修正之后 该错误消失,说明该错误为有其他错误所引起的。




//  bring result,
always@(P_sec or G_sec or CP)
    begin
        if(!rst)
           sum[64:0]<=65'b0;
        else
           sum[64:0]<={CP[63],(P[63:0]^{1'b0,CP[62:0]})}; 此处的错误要尽量避免位数上对应不上  P的最底位应与1‘b0相异或。应注意在高低位安排上要保持一致。
    end 

endmodule




在编写程序的过程中添加新的输入或输出时要注意以下几点:
以我在设计中加入输入信号sel信号为例
1)在主程序中需要加入sel的程序块中加入sel,切记以下是容易遗漏的地方,若always块中出现sel,则always的敏感信号中也必须有sel。


2)在testbench中也要有该信号的输出,并且要记住在sixty_adder m0(.X(X),.Y(Y),.sum(sum),.clk(clk),.rst(rst),.sel(sel)); 语句中也要把sel添加进去。




在检查输出一直为0时的一些办法,对于这类错误系统在编译的时候没有报错,说明不是语法问题。输出一直为0可能由以下几点原因造成的。
1)可能乘法器的输入一直为0,在本程序中乘法器的输入是由sel选通实现的,由于sel信号还同时控制加法器的输入信号,而加法器工作正常,说明sel选通输入的程序没有问题。

2) 还有一个原因就是乘法器一直处于复位状态,但检查之后发现复位信号一切正常。


3)能让乘法器一直为0扎还有一种可能。就是在case语句的最后default语句中乘法器的输入被一直置0,
   若问题出在此处,说明case语句的条件一直不成立,也就是说问题可能发生在case上。经检查发现
     case({Y_tmp1[0], aid}) 出现了问题,由于aid信号为4位信号,而定义的状态信号为两位,因此case的状态就一直是defaule,问题找到  正确语句应改为 case({Y_tmp1[0], aid[1]})。






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -