由于Verilog是一种硬件描绘言语,所以在写Verilog言语时,首要要有所要写的module在硬件上怎么完结的概念,而不是去想编译器怎么去解说这个module. 比方在决议是否运用reg界说时,要问问自己物理上是不是真实存在这个register, 假如是,它的clock是什么? D端是什么?Q端是什么?有没有清零和置位?同步仍是异步?再比方上面评论的三态输出问题,首要想到的应该是在register的输出后边加一个三态门,而不是怎么才能让编译器知道要“赋值”给一个信号为三态。相同,Verilog中没有“编译”的概念,而只需归纳的概念。
写硬件描绘言语的意图是为了归纳,所以说要想写的好就要对归纳器有很深的了解,这样写出来的代码才有功率。
有些东西完全是没有意义的,像有些书上的许多程序,完全是不行归纳的比方发生一个10ms方波什么的程序,用什么#10 ~clk,这样的句子硬件不行能做的那里边许多程序是用来verificaTIon的,不是归纳的。张老师那本书用来当初级教材仍是不错的,可是想经过它来把握verilog是不行的。从前触摸过motorola姑苏规划中心的一位资深工程师,他忠告了一句:便是用verilog描绘电路的时分,一定要清楚它完结的电路,许多人只管学习verilog言语,而不熟悉它完结的电路,这是规划不出好的电路来的
一般写verilog code时,对整个硬件的结构应该是很清楚了,最好有详细的电路图画出,时序问题等都应该考虑清楚了。能够看着图直接写code。
要知道,开端Verilog是为了完结仿真而创造的.不行归纳的Verilog句子也是很重要的.由于在实践规划电路时,除了要完结一个可归纳的module外,你还要知道它的外围电路是怎样的,以及我的这个电路与这些外围电路能否和谐作业.这些外围电路就能够用不行归纳的句子来完结而不用管它是怎么完结的.由于它们或许现已实践存在了,我仅是用它来模仿的.所以,在写verilog的时分应该要先明晰我是用它来仿真的仍是归纳的.要是用来归纳的话,就有必要要严格地运用可归纳的句子,并且不同的写法或许发生的电路会有很大不同,这时就要懂一些verilog归纳办法的常识.就像前面说的,脑子里要有一个硬件的概念.特别是当归纳报错时,就要想一想我这种写法能不能用硬件来完结,verilog究竟还不是C,许多写法是不行完结的.要是这个module仅是用来仿真的,就要灵敏得多了,这时你大可不用太介意硬件完结.只需满意它的语法,完结你要的功用就行了.
有网友说关于#10 clk=~clk的问题,尽管这种句子是不行归纳的,可是在做simulaTIon和verificaTIon是常常用它在estbench中来发生一个clock信号。再比方常常用到的大容量memory, 一般是不会在片上完结的,这个时分也需求一个unsynthesizable module. mengxy所言切中肯罄。
咱们规划的module的意图是为了能够归纳出功用正确,契合规范的电路来。我想这是个重复的进程,就像咱们在写design flow中总要注明前仿真,归纳后的仿真,以及后仿真等。仿真是用来验证咱们的规划的十分重要的手法。而verilog里那些看是无聊的句子这个时分就会发挥很大的效果。我想,用过verilog_xl的兄弟应该深有体会。verilog_xl里的操作,能够用verilog里的体系指令来完结。经过最近的应聘我也深有体会,许多公司看中你在写code时,是否考虑到TIming,architecture,DFT等,这也阐明verilog中的任何句子都是十分重要的。
要写代码前有必要对详细的硬件有一个比较明晰的概念可是想一次完结可归纳代码就太夸张了,verilog的自顶向下规划办法便是从行为建模开端的,功用验证了今后再转向可归纳模型.太介意与可归纳令初期规划变得太累
很赞同这种观点,在做逻辑结构规划时,归纳的要素是要考虑的,可是有许多东西不能考虑的过于详尽,便是在规划的时分不能过于紧卡时延,面积等要素,由于这样以来归纳后优化的余量就会很小,反而晦气与规划的优化,假如在时延和面积要求不是很严重的情况下,其实代码写的行为级,使用归纳东西进行优化也是一种办法。偶就听说有一家很有名的公司,十分信任归纳东西的优化才能,历来不作归纳后仿真的,hehe.当然,假如面积和时延的要求很高,最好仍是把代码写的底层一点,调用库单元时,也要充分考虑其面积和时延的要素。