关于复位赋初值的问题

今天和师哥争论reset赋值和定义时赋值的问题,僵持不下想到真OO无双大神的一句:无code无真相。用code最能说明问题

测试代码随便弄了个加法器:

 1 //date: 2014/09/15
 2 //version : Quartus II 14.0
 3 //designer : pengxiaoen
 4 //function : check reset
 5
 6 module reset_test  (clock ,
 7                     reset ,
 8                     in_a ,
 9                     in_b,
10                     in_c,
11                     ou_d
12                     );
13   input clock ,reset ;
14   input [3:0] in_a ,in_b ,in_c;
15   output reg [5:0] ou_d ;
16
17   reg [4:0] temp ;//=5‘d2 ;
18
19   always @ (posedge clock)
20     if(!reset)
21         ;//temp <= 5‘d0 ;
22     else
23         temp <= in_a + in_b ;
24
25
26     always @ (posedge clock)
27         if(!reset)
28             ou_d <= 6‘d0  ;
29         else
30             ou_d <= temp + in_c ;
31
32  endmodule 

此代码中有两处对temp进行赋值,下面来看rtl图示,首先看到的是reset中 temp<= 5‘d2的操作

下面再看定义时初始化为1的图示

看到了吧,QuartusII 14.0 不支持定义初始化

这不禁让我想到曾经用modelsim做个一个M序列的工程,M序列数就是用一个reg存起来的,就是在初始化的时候赋值的。

查到度娘上有人提问,遇到和我一样的问题,最后有人提出: 定义赋值要综合器支持—— 说明Q14.0不支持定义时进行赋值初始化,但是modelsim-altera是支持的。  同时,他们都支持reset赋值初始化。所以不建议使用定义赋值初始化的写法。

时间: 2024-11-01 13:59:50

关于复位赋初值的问题的相关文章

单片机C语言探究--为什么变量最好要赋初值

有许多书上说,变量最好要赋初值.但是为什么要初值呢?不赋初值可能会出现什么样的意外呢?以下就我在以51单片机为MCU,Keil为编译器看到的实现现象作分析.众所周知,变量是存储在RAM中,掉电后即丢失,上电后默认全为0.那么这样的话没赋初值的变量值全为0,这也应该是大家认为理所当然的.但是,当单片机复位的时候(包括硬件复位即按下复位按钮,看门狗复位,以及其它软件程序复位),单片机只是重新跳回到main函数开始执行,而并没有清空RAM!所以,那些只是定义而没有赋初值的变量(尤其是全局变量)依然会使

在Python中建立N维数组并赋初值

在Python中,由于不像C++/Java这样的语言可以方便的用a[i][j]=0的方式,建立二维数组并赋初值,所以需要一个相对巧妙的方法. 可以用列表解析的方式,eg: >>> mat=[[0 for i in range(5)] for j in range(5)] >>> mat [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 这样就建立了一

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

C语言结构体赋初值

C语言结构体赋初值,特别是结构体中含有数组成员是,最后一个逗号最好是不要多写.因为有些时候可能会出错.图中,红色的框框处.

《oracle数据库递归查询以及给结果赋初值》

CR CREATE TABLE USERS.TBL_TEST ( ID    NUMBER, NAME  VARCHAR2(100 BYTE), PID   NUMBER                                  DEFAULT 0 ) INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0'); INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1' INSERT IN

结构定义时候成员不能赋初值

结构定义的时候,成员变量不能赋初值,否则结构定义变量后,变量中将看不到已赋初值的变量 比如以下代码 struct Point { int x=0; int y; }; void main() { Point pt; } 上述代码中,在main函数中,可以通过 pt.y=5 的方式,进行赋值.却  无法通过 该方法对 pt.x 进行赋值,找不到 pt.x 原文地址:https://www.cnblogs.com/lanzhizui/p/8436887.html

QML TabView动态添加tab和赋初值

通过调用TabView的addTab  动态添加新的选项卡:Tab addTab(string title, Component component),其中title为选项卡标题,component为选项卡内的组件(var component = Qt.createComponent("souces.qml"). 动态添加完成后,返回一个Tab,通过引用Tab的item可以访问component内的方法和属性 动态添加Tab和给Tab内的component赋初值源码: var comp

java在hashmap初始化时赋初值

Java中的HashMap是一种常用的数据结构,一般用来做数据字典或者Hash查找的容器. 一般我们初始化并赋初值是这样做的: HashMap<String, Object> map = new HashMap<>(); map.put("name", "yanggb"); map.put("lover", "huangq"); 但是有时候我们会想在一个表达式中完成初始化并赋初值的操作: HashMap

滚动数组要来回赋初值呀。。orzzzzzzzzzzzzzzzzzzzzzzzzzz

2个小时的人参orzzzzzzzzzzzzzzz --~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~...--~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~... --~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~...--~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~... --~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~...--~(-o ̄▽ ̄)-o ...--o-(_△_o-) ~...