2015-06-27 64 views
-5
module MyProject(A,B,k,right,F); 
    input [31:0]A; 
    input [31:0]B; 
    input [4:0]k; 
    input right; 
    output reg [31:0]F; 
    reg [31:0]F1; 
    integer i,j; 
    initial 
    begin 
    assign F1=(A&~B)+(~A&B); 
    for(j=0;j<k;j=j+1) 
    begin 
     if(right==1) 
     begin 
      for(i=0;i<32;i=i+1) 
      begin 
      F1[i]=F1[i+1]; 
      if(i==31) 
      F1[i]=0; 
      end 
     end 
     else if(right==0) 
     begin 
      for(i=31;i>-1;i=i-1) 
      begin 
      F1[i]=F1[i-1]; 
      if(i==0) 
       F1[i]=0; 
      end 
     end 
    end 
    for(i=0;i<32;i=i+1) 
     F[i]=F1[i]; 
    //F=F1; 
    end 

endmodule 
+1

这是很多修复的方法,不,用户不会愿意为您修复并通过电子邮件发回给您。我已经将第一行作为示例进行了修正,您应该可以通过这种方式工作:)代码采用缩进格式,您必须正确缩进并删除所有“在此输入代码”文本。 – jotadepicas

回答

1

你的代码得到了在这个问题有点混乱 - 这里是一个与输入的原代码的问题在这里与新线更换线路:

module MyProject(A,B,k,right,F); 
input [31:0]A;  
input [31:0]B;  
input [4:0]k;  
input right;  
output reg [31:0]F;  
reg [31:0]F1;  
integer i,j;  
initial  
    begin  
    assign F1=(A&~B)+(~A&B);  
    for(j=0;j  
    begin  
    if(right==1)  
    begin  
     for(i=0;i<32;i=i+1)  
      begin  
       F1[i]=F1[i+1];  
       if(i==31)  
       F1[i]=0;  
      end  
    end  
    else if(right==0)  
     begin  
     for(i=31;i>-1;i=i-1)  
      begin  
       F1[i]=F1[i-1];  
      if(i==0)  
       F1[i]=0;  
      end  
     end  
    end  
    for(i=0;i<32;i=i+1)  
    F[i]=F1[i];  
    //F=F1;  
end  
endmodule  

我猜测的目的是对输入A和B执行逻辑运算,然后生成一个移位输出。我想你接近,但也有一些需要纠正的几件事情:

  1. 功能只是有一个初始块,所以当模拟器启动时,它总是会自动运行一次,它永远不会再次运行。你没有提到赋值是否要创建一个连续生成输出F的函数(即一堆没有寄存器的门)或者一个函数在时钟边沿评估“A/B/k/right”,然后生成输出。如果要创建组合函数,那么当需要用“always @ *”替换“initial”时,每次输入值更改时都会重新运行该函数,并且还需要将reg的值更改为电线。如果你正在创建一个注册块,你将需要添加一个时钟。对于钟控移位寄存器的一个很好的例子,您可能会使用look at this code

  2. 在初始块内有一个assign语句。赋值语句表示Verilog中始终为真的表达式,因此它们超出了程序块。分配语句为寄存器赋值 - 分配语句应该与电线配对。

  3. 程序代码使用F1寄存器作为输入和输出,但F1已被赋值。我建议将其分成两步,主要计算(A & B)+(A A & B)并将其分配给F1。然后写一个程序块来执行F1输入到输出,这可能是一个电线或寄存器取决于#1的回答

希望有所帮助。

+0

非常感谢你肯:D它真的帮助我感谢。 :) @肯Boorom –

相关问题