US复制这条信息,打开
获得 231 次赞
帮助过781人
数据手册
首先让我们瞧瞧两种相关语法,亦即 begin ... end 与 frok ... join。 参考书曾经说过begin ... end 是顺序块,然而 frok ... join是并行块,然而类似说法只是语法方面的规定和说明而已。先不管它们是顺序块或者并行块,根据笔者的理解 begin ... end 是综合语言的括号功能,类似c语言的{};反之,frok ... join则属于验证语言,不过笔者不太喜欢验证语言,所以暂时无视它。 事实上,操作是否并行执行还是顺序执行并不是取决语法本身的规定或者说明,而是取自语言的本质。verilog打从一出生就是并行性质,不管我们要不要。换句话说,不用我们去管,并行操作就是verilog的默认操作 ... 很遗憾的是verilog 天生并不支持顺序操作,所以我们才需要建立仿顺序结构,好让verilog支持顺序操作。 相反的道理,c语言一出生就是顺序(步骤)性质,也就说顺序操作是默认操作,并行操作确实c语言一辈子的痛,为此才会出现任务调度这种机制,好让c语言模仿并行操作。因此,verilog 语言的“begin ... end” 等价c语言的“{}”,这样的理解绝对有理。 最后让我们再看一段较为匪夷所思的现象,exp07_simulation的第21行 reg1的复位值为9,然而根据第29行,先是执行reg2