verilog设计中,当对同一个被赋值目标同时进行2次或多次赋值时,怎样来决定被赋值目标的有效值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog设计中,当对同一个被赋值目标同时进行2次或多次赋值时,怎样来决定被赋值目标的有效值?相关的知识,希望对你有一定的参考价值。
理论上讲for语句应该不能在除了always块之外的地方使用,所以你这个问题根本就不成立就算是能在initial中使用的话,也应该是同时赋值的。initial块中的所有变量,只要没有加延时都应该是同时赋值的,initial语句块中的所有数据都会在仿真开始的一瞬间同时赋值
参考技术A 同时进行两次赋值,肯定是非阻塞赋值。并行多次赋值可能会出现X状态。本回答被提问者采纳
verilog HDL状态机 赋初值问题
最近要做数字时钟,要用LCD显示,参考的两个程序里面都有状态机,一个是调整时间用的,一个是LCD显示用的,现在被我放在一起了,该怎么处理才可以?可不可以在几个CASE后面分别赋值?
两个always可以独立写。也可以写在一起,只要触发条件相同。但是要注意一点,如果独立写,在2个alway结构中,不能对同一个变量赋值,不然就会出现错误。这就是verilog不能当做软件使用的一点体现,原因在于数字电路的输出不能随意连在一起。
欢迎追问~ 参考技术A 分成两个always模块就可以了。两个always分别写两个状态机。
当然,如果两个状态机是一样的,可以弄成一个追问
这样可以吗?reg[3:0] state1=4'b1001,state2=4'b0000;
parameter warmup=4'b0000,
...... countime=4'b1001;
两个状态机分开使用
1.建议不要reg直接赋初值,你可以全部用parameter来。也可以直接定义两个reg型的变量。状态变化就将这个reg型变量加1就行了。也可以全部用parameter,这样对状态的作用的分辨有帮助。
2.放在两个进程中,只要不在两个进程中驱动一个信号,对它赋值就可以了。如果要对同一个reg信号(作为模块的output)赋值,那么肯定需要设置两个中间寄存器来对数据进行选择。
其他应该没什么问题。其实就是把两个。v文件的输入输出结合到一起,然后把各自的除了IO以外的包括进程 reg wire声明以及其他assign赋值语句搬移到一个模块中就可以了。要注意的仅仅是没有重复的reg复制,没有重复的声明以及此模块可能需要的模块例化。
这样可以吗?reg[3:0] state1=4'b1001,state2=4'b0000;
parameter warmup=4'b0000,
...... countime=4'b1001;
两个状态机分开使用
parameter 放在always外就可以啦
以上是关于verilog设计中,当对同一个被赋值目标同时进行2次或多次赋值时,怎样来决定被赋值目标的有效值?的主要内容,如果未能解决你的问题,请参考以下文章