输出信号是reg还是wire好,求助
reg吧,没有毛刺,而且时序容易收敛
reg不一定就是触发器,我定义reg型,照样可以组合逻辑输出,
关键是看你输出的是时序变量还是组合变量
定义为reg,有利于时序分析
无所谓,但是一般最好的是寄存器直接输出(寄存器输出可能是reg也能是wire),时序分析上会好很多。
端口IO register是好的设计习惯,这样不用担心有logic path extended到别的模块,从而导致时钟收敛出问题。
好坏不取决于reg还是wire,而取决于是寄存器输出还是组合电路输出。
一般一个design的顶层输出最好是reg输出。内部模块之间可以灵活安排。
我在altera的quartus II环境下也遇到过这样问题,不过不是所有时候都通用的,在整理逻辑下对reg进行assign赋值编译没有问题,而单独拿出模块编译时不能通过的,所以建议不要这样做,相同的程序拿到xilinx的ISE环境下编译,无一例外,全部报错,相对来说xilinx环境对语法要求更为严谨,严谨逻辑能减少调试。
模块间信号传递,或者逻辑输出最好定义为reg类型,输出稳定,减少毛刺。
reg型肯定不能用assign的,我意思是说,我用reg型在always @*里写的组合逻辑跟wire型用assign综合出来完全一样的电路,
模块间接口不是说写成reg就不会有毛刺,应该是写成时序逻辑输出才能防毛刺,同时提供较好的时序。
这是编译器有时放过这种语法错误,反正我是没遇到这么好的事了,语法上assign只能对wire类型操作,assign个人看法是它是个绝定性赋值关键句,就是被操作的wire变量对新值是绝对接收的,因为它相当于一条导线。reg是寄存器,可以通过使能时钟来决定接收新值和拒收新值保持旧值。
对UP主的问题,个人是建议用reg,因为它有锁存的功能,这样对数值输出有更好的保证,我向来都是定义成reg的
关键是最好用寄存器输出,不是信号类型的问题
我一般是输入端口为wire,输出端口为reg,防止毛刺向后端传播
