请教verilog里变量声明时和有什么区别呢?
没什么区别!只是个人习惯
2楼正解,就是没区别,设计风格和一些团队项目规范
没区别的,都用过
当然有区别了。比如:
reg [7:0] a;
reg [0:7] b;
a = 8'h55;
b = 8'h55;
结果是a[0] = 1;b[0] = 0;a==b,但是a[0] != b[0]
只是MSB与LSB的位置不同,a[0]是a的LSB,b[0]是MSB,所以a[0]!=b[0],应该是a[0]==b[7].
本质上并没有什么差别吧。
还是按照一般的来吧,不必要搞那么多花样。
verilog里边的数据都是按照右对齐来的。
从工程角度看,这个问题非常严重。举例,你的模块有一个输入端口声明为[0:7],那你必须要告知你的上级模块,无形中既增加了工作量又带来大量潜在的bug。
所以,大家普遍使用[7:0]这种风格,因为它符合我们的习惯(从左到右,自高到低)。
更要命的是,[0:7]这种风格和所有的运算法则完全违背。比如上文说的a和b,如果有c=a+b,c本应该是ff,但是实际上却变成aa。显然是用[0:7]除了装酷之外,只会给自己和同事带来无尽的麻烦。
a[7:0] 是小端形式
b[0:7] 是大端形式
5楼讲的到位
显然是用[0:7]除了装酷之外,只会给自己和同事带来无尽的麻烦。
--顶这句--
我们是工程师,不是学生,就算是也应该站在工程的角度来看问题,死钻语法的牛角尖没意义。
shouyilaingduo
讲的不错,学习了
你写成[6:-1]也不会怎样
以后 我的代码要注意了
【1】 物理上,在silicon里,没有任何区别。前提是你连接正确
【2】 从综合器的角度,同上,没有区别
【3】区别在于仿真器对语言的compile时,elaborate前,会产生不同的“电路仿真模型”。你写成[7:0]和[0:7]
可能会被compiler编译成不同的目标放在simulation内存里面,仿真的behavior会不同。比如【0:7】可能会是aggregated ram中的一部分,而前者肯定只是普通的vector。
所以不光是一个写代码习惯的问题, 这是一种不同的描述方式。
按照通常的小端格式来吧,弄得七七八八反而会出错,工程方面将就大多数人习惯,不讲究标新立异。
大小端,都可以用
