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复制,没有重复的声明以及此模块可能需要的模块例化。

参考技术B 可以用一个或多个always,赋初值放在一个if (reset)中就可以啦追问

这样可以吗?reg[3:0] state1=4'b1001,state2=4'b0000;
parameter warmup=4'b0000,
...... countime=4'b1001;
两个状态机分开使用

追答

parameter 放在always外就可以啦

以上是关于verilog设计中,当对同一个被赋值目标同时进行2次或多次赋值时,怎样来决定被赋值目标的有效值?的主要内容,如果未能解决你的问题,请参考以下文章

在verilog HDL语言中的阻塞赋值和非阻塞赋值究竟有啥不同?同一变量在不同的过程块中(同时触发)又是如

verilog中为啥非阻塞赋值要用绝对时延

verilog 关于阻塞与非阻塞赋值同时使用时的问题

Verilog的循环语句

verilog语句执行顺序的疑问?

在 verilog中的非阻塞赋值在啥时候赋值时刻结束?