wanwzy 发表于 2010-7-10 17:56:10

关于verilog的语法问题,快来看看,超急呀!!!!!!

在夏宇闻教授的经典verilog教材中有这样2点,小弟刚学verilog不久,没有完全理解,请大家详细解释下(最好能举例说明),万分感谢!!!!!!
1.原文:“1)这样可以在块内定义局部变量,即只在块内使用的变量。
          2)这样可以允许块被其它语句调用,如被disable语句。
          3)在Verilog语言里,所有的变量都是静态的,即所有的变量都只有一个。因此进入或跳出块并不影响存储在变量内的值。
          基于以上原因,块名就提供了一个在任何仿真时刻确认变量值的方法。 ”

“基于以上原因,块名就提供了一个在任何仿真时刻确认变量值的方法。”这句话怎么理解呀?

2.原文:“下面举一个while语句的例子,该例子用while循环语句对rega这个八位二进制数中值为1的位进行计数。
begin: count1s
reg tempreg;
count=0;
tempreg = rega;
while(tempreg)                   //当tempreg中有不为0的位时,循环执行
begin
if(tempreg)count = count + 1;
tempreg = tempreg>>1;
end
end ”

1).“//当tempreg中有不为0的位时,循环执行”这句注释我是否能理解为可以将“while(tempreg)”改写为“while(tempreg != 8'b00000000)”
2).除了while语句可以用“while(tempreg) ”来表达“当tempreg中有不为0的位时,循环执行”的意思,其他的语句(如if,forever,repeat等)能像while语句这样来表达吗?特别是if语句行吗?

wxr000 发表于 2010-7-10 20:30:24

块名确定变量值的意思是:如果程序中还有一个变量和tempreg同名,也很容易确定说的是哪个变量,因为使用块中的变量时是这样调用的countls:tempreg,即变量名前带有块名所以仿真时不会因为变量名相同而用错值。
while循环中,我觉得应该理解为当tempreg=8'b11111111时循环执行。
if语句是条件语句,可以像while那样表达,但是只是作为if语句的条件;forever语句是永久循环,不用任何条件,所以不能这样表达;repeat语句是循环语句,但是它带一个表示控制次数的常量或是变量,也不能这样用。

wanwzy 发表于 2010-7-11 09:49:45

回复【1楼】wxr000
块名确定变量值的意思是:如果程序中还有一个变量和tempreg同名,也很容易确定说的是哪个变量,因为使用块中的变量时是这样调用的countls:tempreg,即变量名前带有块名所以仿真时不会因为变量名相同而用错值。
while循环中,我觉得应该理解为当tempreg=8'b11111111时循环执行。
if语句是条件语句,可以像while那样表达,但是只是作为if语句的条件;forever语句是永久循环,不用任何条件,所以不能这样表达;repeat语句是循环语句,但是它带一个表示控制次数的常量或是变量,也不能这样用。
-----------------------------------------------------------------------

非常感谢!其实我与你这个观点“while循环中,我觉得应该理解为当tempreg=8'b11111111时循环执行。”是相同的,但是在书中它的注释是“while(tempreg)   //当tempreg中有不为0的位时,循环执行 ”,所以我有点拿不准了,请教下各位的意见。呵呵!

wanwzy 发表于 2010-7-12 15:01:02

经过我的仿真实验证明while(tempreg)与while(tempreg == 8’b11111111)确实意思不一样,while(tempreg)确实表示当tempreg中有不为0的位时,循环执行。而且在if语句中同样适用。这个不同我觉得可以作为写代码的小技巧,欢迎各位拍砖!
页: [1]
查看完整版本: 关于verilog的语法问题,快来看看,超急呀!!!!!!