《Verilog数字VLSI设计教程》里2.4节 第一步 异步置数和清零的例子,光盘里给的代码是
always@(posedge clk2, negedge pre_n, negedge clr_n)
begin
// Put the assertion local to the device that it
// is intended to check:
`ifdef DC
`else
if (pre_n==1'b0 && clr_n==1'b0)
$strobe("\n***Time=%04d. pre_n=%01b and clr_n=%01b asserted.\n"
, $time, pre_n, clr_n);
`endif
//
if (clr_n == 1'b0)
QpreClearReg <= 1'b0; // clear has priority.
else if (pre_n == 1'b0)
QpreClearReg <= 1'b1;
else if ( clk2 == 1'b1)
QpreClearReg <= D;
end
综合的时候提示Error: clock used as data
这是由于使用了条件判断 if(clk2==1’b1),括号中只能是数据,如果是clock信号,DC会报错。
解决办法:
1、这条语句不写条件也是可以的
综合出来的正确的电路如图所示