usd 发表于 2010-6-27 23:17:38

一段Verilog代码的意思

本帖最后由 fpgaw 于 2010-7-4 07:20 编辑

请教高手们一段Verilog代码的意思
在仿真的测试模块中CLK是所需的时钟信号,是用下面这段代码实现的,可是触发条件为posedge CLK,而此时CLK时钟信号还没有产生呢呀,怎么可能有上升沿呢??而且在begin---end中竟然有两次的赋值,这样能实现吗?? 谢谢啦

initial CLK <= 1'b1;
initial CLK_N <= 1'b0;
always @(posedge CLK) begin
CLK <= #(`tCK/2) 1'b0;   
CLK_N <= #(`tCK/2) 1'b1;
CLK <= #(`tCK) 1'b1;
CLK_N <= #(`tCK) 1'b0;
end

CHANG 发表于 2010-6-28 00:03:48

...拿个modelsim跑跑不就知道了..

usd 发表于 2010-6-28 00:37:48

偶modelsim跑了,程序如下 <br>
module tst_clk;<br>
<br>
`define tCK 10<br>
<br>
reg CLK;<br>
reg CLK_N;<br>
<br>
initial CLK &lt;= 1'b1;<br>
<br>
initial CLK_N &lt;= 1'b0;<br>
<br>
always @(posedge CLK)<br>
begin<br>
&nbsp; &nbsp;CLK&nbsp; &nbsp;&lt;= #(`tCK/2) 1'b0;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp; &nbsp;CLK_N &lt;= #(`tCK/2) 1'b1;<br>
&nbsp; &nbsp;CLK&nbsp; &nbsp;&lt;= #(`tCK) 1'b1;<br>
&nbsp; &nbsp;CLK_N &lt;= #(`tCK) 1'b0;<br>
end<br>
<br>
endmodule<br>
<br>
跑完了波形如料是互补的两个方波...<br>
是不是initial clk &lt;=1 就算第一个posedge了么

ups 发表于 2010-6-28 01:53:09

initial之前CLK是x,x-&gt;1算是一个posedge,所以会触发下面的begin-end。<br>
begin-end之间的语句是顺序执行的,当然可以两次赋值喽。

HDL 发表于 2010-6-28 03:02:27

原来是这样!

HDL 发表于 2010-6-28 04:08:15

学习到了!

ATA 发表于 2010-6-28 06:02:46

原帖由 chlor 于 2007-6-13 00:25 发表
       
        http://www.edacn.net/bbs/images/common/back.gif

<br>
initial之前CLK是x,x-&gt;1算是一个posedge,所以会触发下面的begin-end。<br>
begin-end之间的语句是顺序执行的,当然可以两次赋值喽。 后面说的不对,由于是非阻塞赋值,所以是并行的,只不过由于延时的时间不同,所以CLK在1/2周期的时候被改变了一次(第一条赋值语句),在一个周期的时候又被改变了一次(第三条赋值语句)。如果是顺序执行的话,则CLK在1/2周期的时候会被改变了一次,在1.5个周期的时候被第二次改变。当把begin-end中的非阻塞赋值改成阻塞赋值的时候,就是顺序执行了。

ICE 发表于 2010-6-28 06:22:15

答得对,是这个意思
页: [1]
查看完整版本: 一段Verilog代码的意思