这是10位的LSFR。我在verilog中使用了LSFR模块。你可以在下面的给定代码中看到。 LSFR的输出是当前状态。我想访问它的每个位。但是在这里我为Current_State得到0。它没有更新。请任何人都可以帮助我..
module LSFR_counter #(parameter n=6)( output Reg, input clk, input reset);
//parameter n=10; // Change more than n to change LFSR length.
reg [n:1]Reg; //All procedure outputs must be registered
reg [n:1] counter ;
initial
counter =0 ;
always @(posedge clk or posedge reset)
if
(reset) Reg <=1;
else
begin
counter <= counter+1 ;
Reg <= {Reg[n-1:2], Reg[n]^Reg[1], Reg[n]};
end
endmodule
module Main( output Reg input Clock , input reset
);
reg Fgf8,Emx2,Pax6,Coup_tfi,Sp8; // Genes
reg F,E,P,C,S; // Proteins
reg [10:1] Current_State ;
LSFR_counter #(.n(10)) lsfr ( .Reg (Current_State), .clk (Clock ), .reset(reset) ) ;
Fgf8 <= Current_State[N-0] ; // Gene
F <= Current_State[N-1] ; // Protein
Emx2 <= Current_State[N-2] ;
E <= Current_State[N-3] ;
Pax6 <= Current_State[N-4] ;
P <= Current_State[N-5] ;
Coup_tfi <= Current_State[N-6] ;
C <= Current_State[N-7] ;
Sp8 <= Current_State[N-8] ;
S <= Current_State[N-9] ;
endmodule ;
答案 0 :(得分:0)
代码中出现了几个问题:
Main
模块的输出名称为Reg
,未分配任何信号。因此,如果您希望从中获得任何价值,那么您就不会。 Fgf8, F..
和朋友,但未使用。 更新:实际上,分配不正确。如果它们应该被同步分配(在时钟周期上),它应该被包装在always
块中。如果您的意思是使用组合电路,则应使用assign
语句。N
。 Verilog区分大小写,因此n
!= N
。LSFR_counter
模块中,counter
未重置为初始值。这些是迄今为止可以看到的问题。
答案 1 :(得分:0)
在LSFR_counter:中,您混合使用ANSI和非ANSI标头样式。这是非法的语法。也许你的模拟器/合成器允许它,但它不受支持并且是一种不好的做法。
您应该使用ANSI:IEEE Std 1800-2012§23.2.2.2 ANSI样式的端口声明列表
module LSFR_counter #(parameter n=6)( output reg [n:1] Reg, input clk, input reset);
reg [n:1] counter;
// ...
或非ANSI:IEEE Std 1800-2012§23.2.2.1非ANSI样式端口声明
module LSFR_counter #(parameter n=6)( Reg, clk, reset);
output Reg;
input clk;
input reset;
reg [n:1] Reg;
reg [n:1] counter;
// ...
非ANSI适用于IEEE Std 1364-1995,并且与后来的IEEE 1364版本和IEEE 1800的所有版本具有后向可比性。自IEEE Std 1364-2001以来,对ANSI的支持已经存在。
在主要内容:没有任何东西在推动Reg
。其他信号(例如:Fgf8
,F
,Emx2
等)从未被声明并且具有非法分配。 N
也从未被定义过。我假设它是一个参数。您可以将它们声明为reg并在组合块中分配:
parameter N=10;
reg Fgf8,F, ... ,Sp8,S;
always @* begin
Fgf8 = Current_State[N-0] ; // Gene
F = Current_State[N-1] ; // Protein
// ...
Sp8 = Current_State[N-8] ;
S = Current_State[N-9] ;
end
或者声明为电线并使用连续分配进行分配:
parameter N=10;
wire Fgf8 = Current_State[N-0] ; // Gene
wire F = Current_State[N-1] ; // Protein
// ...
wire Sp8 = Current_State[N-8] ;
wire S = Current_State[N-9] ;
两者都合成相同。