lcytms
发表于 2018-12-18 09:14:52
1121
做仿真设置。
同样指定周期1us。
语法检查。
lcytms
发表于 2018-12-19 09:22:08
1122
大家看到相同的结果。
这三个例子就是用多路器说明的数据流和结构化。
非常关键的行为,我们还没有介绍到。
行为的描述,VHDL和Verilog有一个非常重要的区别。
先休息十分钟。
(课间休息)
lcytms
发表于 2018-12-19 09:23:46
1129
好,接着上课。
现在我们来讨论VHDL的行为语句。
非常重要。
现在我们看看行为怎么写。
同样另存为mux2_vh_behaviour_case.vhd。
可以用if或者case。
设置为顶层。
lcytms
发表于 2018-12-19 09:25:22
1130
名字换过来。
这边是行为了。
Ctrl-S、Ctrl-K。
行为语句,case、if是用人类的语言来描述。
行为语句使得EDA充满了活力,使得它的效率得到了极大的提升。
可以说行为语句是EDA的一种革命性的转变。
它只需要描述电路的what to do。
而不需要描述how to do。
lcytms
发表于 2018-12-20 09:20:50
1131
具体的how to do完全交给综合器。
所以说行为语句必须具有三个特征。
在Verilog里面,第一,行为语句的输出要声明成reg。
第二,行为语句必须置于特定的行为体,EDA才能识别。
第三,行为语句必须有信号敏感表。
信号敏感表里面列出的信号发生变更的时候,EDA才对它进行处理。
从而减轻EDA的负担。
现在我们回到正宗的米德体系下,信号敏感表是跟综合无关。
米德体系下,信号敏感表就是信号敏感表,它跟综合无关。
它只跟非综合目的有关。
lcytms
发表于 2018-12-20 09:21:40
1132
仿真验证的时候,减轻EDA的开销。
设计者通知,哪些信号变更了,EDA才处理这段行为。
Verilog的莫比加上了一个negedge、posedge的修饰,有且仅有一个沿未被引用,会生成寄存器,影响它的结构,影响它的综合性。
我们回到VHDL。
它的信号敏感表跟综合性无关。
在VHDL里面只有两个要素,声明成行为的时候。
第一,行为语句必须置于循环行为体。
循环行为体只有一个,就是process。
不能直接写case语句,不能直接写if语句。
EDA无法识别,直接报错。
这跟Verilog是相同的。
但是这个循环行为体在VHDL里面只有一个。
lcytms
发表于 2018-12-20 09:22:41
1133
Verilog里面有两个行为体,一个是初始化行为体,一个是循环行为体。
VHDL只有一个,非常简单,就是一个process循环行为体。
所有的行为语句必须置于行为体之中。
第二个要素,要有信号敏感表。
而且是真正的信号敏感表,与综合无关。
无论你写还是不写,无论你写哪个信号,跟综合没有关系。
综合完全是一模一样。
只是跟非综合目的,验证的时候,第三方分析的时候,EDA软件处理的时候,信号敏感表里面列出的信号变更的时候,EDA软件才会处理这段行为。
举例来说,在Verilog的信号敏感表里面,列出了部分信号,没有列出全部信号,你在下板的时候,可能是正确的。
可是你仿真的时候,可能看着不正确。
因为有部分信号没有列出来。
就是这个原因。
lcytms
发表于 2018-12-20 09:23:37
1134
所以说VHDL它是一个严谨的体系。
现在我们来写这个case语句。
先写上process的框架。
Case语句必须置于其中。
其次呢,就是要有信号敏感表。
就是圆括弧,不需要加上@。
信号敏感表里面列出的信号变更的时候,EDA的软件才会来运行,才会来处理这段行为。
lcytms
发表于 2018-12-26 09:36:00
1135
从而减轻它的开销。这段代码也称为一个隐式建模IM。
IM可以命名的。
对隐式建模的命名,它也是米德体系下面的内容。
莫比的Verilog并没有对它的直接支持。
我们是在begin后面加冒号。
并不是加在整个行为体的前面,有后面补充的嫌疑。
VHDL可以直接命名。
lcytms
发表于 2018-12-26 09:38:01
1136
取个名字mux2_behaviour。
这个名字也是可有可无的。
哪些信号变更的时候,我们希望在仿真的时候,EDA能处理它呢?
当然是所有输入的信号。
A,b,s。
看一下语法。