EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! {$ R Q, [5 Q; }
程序问题分析解决方案分享 刚入门的朋友编写了一个简单的程序,出现如下问题: module blocking(
1 p) D( Z' P) R% X+ W din, //数据输入信号
9 T$ \) ^9 r- `# ~& W; N% u dout //数据输出信号
& a8 y; Y5 p1 p3 C );
$ v- L% Y. l! V' O1 h. t input din;$ u* f, P. L* ]0 X) g! K0 O: u) E
output dout;9 R5 t0 N% V2 I0 r. B) `6 c+ d
* T8 N1 g- C7 {7 n$ w2 s
wire din;! K8 Z# V: n4 p) S5 q" w
reg dout; //数据缓冲1 O9 ^4 Z( ~& r! U
reg [1:0] temp; 3 r4 @0 K: w" E! S
- i* }5 l: S! N1 I
always @(din)- T' b: |5 T4 h0 M: V: [5 u
begin
4 h5 G9 n( j# ^1 m
* V& Q# W8 A3 ~ dout=temp[1];
$ }0 [. T7 ~$ f7 A5 t temp[0]=din;' d( k. }- \; ]7 P2 S9 H, D+ O) x# M
temp[1]=temp[0]; 3 |, u ?5 z6 m) b
endmodule & X$ c3 o/ e: N. u
Warning (10235): Verilog HDL Always Construct warning at blocking.v(15): variable "temp" is read inside the Always Construct but isn't in the Always Construct's Event Control & C( o& S! r3 @9 u# J# W2 Y
程序编译完全通过,出现警告。 警告的意思:变量temp 在always 语句中总是读,但是没有在always的敏感变量中。 1 S% w# X3 a6 c$ T
解决方案:always @(din,temp) + P1 h. E7 c# s: F# j
always模块要求所有的敏感变量都要出现在@后面,避免锁存器出现!
: H5 Y; E3 s! o% d% x" u+ c: a; c, q |