Verilog描述下的初始化问题
来源:互联网 发布:htc软件下载 编辑:程序博客网 时间:2024/05/21 15:02
最近在百度知道里见过两个问题,如下:
问题1:
module outer(q,c0,c1,led1,led0); input q; output c0,c1,led1,led0; reg c0,c1; wire led1,led0; always@(q) begin c0<=~c0; c1<=c0^c1; end assign led0=c0; assign led1=c1;endmodule这是我的代码,为什么加波形的时候说没有q这个信号呢?仿真的时候也说输入管脚q被忽略了
module sa(a,b,mu,shiftb,start);input [3:0] a,b;input start;output reg[7:0] mu,shiftb;integer i;always @(a or b) begin if(start==1) beginshiftb[3:0]=b;for(i=0;i<4;i=i+1) if(a[i]) begin shiftb=shiftb<<i;mu=mu+shiftb;end else begin shiftb=shiftb<<i;mu=mu+4'b0000;end end endendmodule
看着两段代码功能不一样,但错误的本质是一样的。这里不对两段代码的编码风格做分析,也不考虑算法是否能实现预期功能,只考虑复位问题。因为两段代码的错误根本都是由于输出端口没有初始化,就直接参与了中间逻辑运算,这样一个信号x,与别的信号运算,不管是0还是1,结果还是x
以前看过一本教材,说电子系的人学verilog思维偏电路,容易忽略一些编程的细节;而学计算机的人学verilog思维偏编程,容易忽略语言对应的硬件结构。也许我之前编程稍微熟一些,所以一开始就关注到变量的初始化问题。其实在硬件电路里也是有复位的,完全可以增加一个复位信号初始化一下中间使用到的变量。或者遇到第二个例子中的情况,不要写了if不写else,描述成不必要的锁存器结构,可以利用这个else,在start信号为低电平的时候,将mu初始化为0,这样问题就解决了。
- Verilog描述下的初始化问题
- Verilog描述FSM应注意的问题
- verilog的描述风格
- [转]格雷码计数器的Verilog描述
- Verilog有限状态机的三种描述
- Verilog HDL的程序结构及其描述
- Verilog HDL的程序结构及其描述
- verilog的小数问题
- Verilog三段式状态机描述
- D触发器Verilog描述
- Verilog三段式状态机描述
- Verilog HDL常用的行为仿真描述语句(一)
- Verilog HDL常用的行为仿真描述语句(二)
- Verilog HDL常用的行为仿真描述语句(三)
- Verilog HDL常用的行为仿真描述语句(四)
- Verilog HDL常用的行为仿真描述语句(五)
- Verilog HDL常用的行为仿真描述语句(六)
- Verilog HDL常用的行为仿真描述语句
- exec跟source的差别
- 网站中实现图片等比缩放
- VC中忽略Inconsistent Line Endings提示带来的问题
- 人事经理揭秘应聘窍门:行不行看简历20秒就定
- Zookeeper启动没错但无法查看Status解决办法
- Verilog描述下的初始化问题
- Visual C++ 2008新特性速递
- redhat as 5.5上安装gcc和g++
- redhat as 5.5上安装ant
- android 调用系统联络人
- 我是一个不太一样的研究僧
- 为Hadoop的namenode做NFS灾备步骤
- ()与{}的差别
- 关于新任项目经理的转型问题