打印

Verilog初学者遇到的问题,请教各位!

[复制链接]
2263|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andy_mqy|  楼主 | 2011-3-11 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习Verilog时,看到书中有这样一段程序:

module random_pulse( dout );
   output [9:0] dout;  //定义10位输出变量
    reg dout;          //声明该变量为寄存器变量,没有说明位数,默认不是1位寄存器吗?
   ..
   ..
   ..
endmodule
  
  dout变量先定义为10位,之后声明是1位寄存器变量,合乎语法吗?还有,有时说明变量为input 或output,然后还要说明是reg型,有时候不用说明,在什么情况需要说明,什么情况不需要说明?请教各位指点,多谢!

相关帖子

沙发
xiangxiaowei| | 2011-3-12 12:04 | 只看该作者
output [9:0] dout;
reg dout;
这种写法是正确的。这两个语句和下面的两种语句功能相同
1.
output [9:0] dout;
reg [9:0] dout;
2.
output dout;
reg [9:0] dout;
你可以分别用不同的语句写这个代码,然后看看rtl schematic视图,可以看到dout都是10位输出。我建议你还是按照第一种写法来写,这样不会引起别人的误解。
至于为什么要用reg定义变量,是因为在always语句块里面,赋值的类型必须是reg类型的变量。还要注意的是,不能在多个always语句块里面对同一个reg变量多次赋值。当然reg还有其它的用处,书上有完整的解释。
因为我是上个学期开始学verilog,讲的不对的地方,请大家多多指教。
不过呢,这种问题我觉得你还是应该多看看书再来问,毕竟这是基本的语法问题。

使用特权

评论回复
板凳
bbsidking| | 2011-3-13 14:03 | 只看该作者
verilog需要指明三个东西 输入输出方向,驱动类型(可以不写,默认为wire),位宽(可以不写,默认为1bit)。  了解了这个东西就不要迷惑了。

关于output和reg
你完全可以写成 output reg [9:0],这是一个并集。

使用特权

评论回复
地板
小云001| | 2011-3-20 21:45 | 只看该作者
学习了

使用特权

评论回复
5
wkun| | 2011-5-15 15:17 | 只看该作者
哦哦

使用特权

评论回复
6
davines| | 2011-5-15 19:07 | 只看该作者
学习了。

使用特权

评论回复
7
ladygaga| | 2011-5-15 20:19 | 只看该作者
O,受教了。

使用特权

评论回复
8
kangkai1222| | 2011-5-31 14:21 | 只看该作者
学习了~

使用特权

评论回复
9
AutoESL| | 2011-5-31 14:26 | 只看该作者
学习了

使用特权

评论回复
10
GoldSunMonkey| | 2011-5-31 15:27 | 只看该作者
2# xiangxiaowei 我来说两句,为什么不能在一个always里面对同一个变量赋值两次。

这就是软件工程师转成FPGA 工程师,所需要的一种思维上的变化。
always是一个并行进程里面的步步执行。如果你多次赋值,并不能把数值传递下去。

使用特权

评论回复
11
AutoESL| | 2011-6-2 15:32 | 只看该作者
关键还是要有并行这个概念
并行嘛,所以在不同的两个always块里面赋值就有冲突,两个值同时给你,你要哪一个?
不知道,所以干脆从语法来约束,不允许这样做。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

86

帖子

3

粉丝