集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2217|回复: 7

一段Verilog代码的意思

[复制链接]
usd 发表于 2010-6-27 23:17:38 | 显示全部楼层 |阅读模式
本帖最后由 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 发表
       
       

<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 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-30 16:46 , Processed in 0.069414 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表