lcytms
发表于 2018-11-23 10:14:34
1004
蓝色的部分是保留字,一个都不能错,错了就不能显示出蓝色了。
它肯定会报错。
这样的话呢,我们就得到了结构体的描述。
17行的空白行,是结构体的库声明部分。
在VHDL里面有变量的作用域,声明在什么地方,它的作用域就在什么地方。
现在我们就得到了框架frame部分。
相当于我们写了Verilog的一个框架,module和end module,端口列表,input和output声明出来之后,一行代码都不用写。
然后Ctrl-S、Ctrl-K。
执行一次分析综合。
这个就是称之为一个frame,框架。
VHDL的框架同样如此。
lcytms
发表于 2018-11-23 10:16:13
1005
代码一行都不写。下面这个代码很简单。
Verilog里面用的是assign。
这里不需要。
数据流直接写驱动。
F声明是什么呢?
它绑定了一个标准类型signal。
唯一的signal的赋值符<=。
不称为非阻塞,就是唯一的赋值符。
凡是放在端口部分的就是signal,就是信号。
信号就一定用这个符号赋值。
至于它会综合成什么,那就完全交给综合器。
lcytms
发表于 2018-11-26 11:46:43
1006
与运算符是and。
Ctrl-S、Ctrl-K。
这个双输入与门,用VHDL的建模就完成了。
三个部分形成。
同样的模型,用Verilog要很少的代码,VHDL要很多的代码才能描述。
代码量要多一些。
现在我们同样地写验证。
取它的名字,copy出来,新建VHDL。
lcytms
发表于 2018-11-26 11:50:54
1007
立刻另存为and_gate_vh_tb。
这里不需要写时标timescale。
因为VHDL有自己的时标单位。
Testbench仍然是一个抽象的电路模型,它也必须由三个部分组成,它的写法仍然是这样。
带下划线的部分是一个封装。
同样写它的实体,这次呢是testbench。
lcytms
发表于 2018-11-26 11:51:59
1008
我们在写Verilog的testbench的时候,它是没有端口列表的。
所以说它的外在的端口列表是可以省略的。
所以说在VHDL里面是这样写的。
End entity或者直接写end and_gate_vh_tb。
lcytms
发表于 2018-11-26 11:53:20
1009
这种写法就是,库声明、实体、结构体,三位一体来声明一个显式建模。
这个跟Verilog是一样的。
Verilog也是一个显式声明的结构,用module和endmodule括起来。
这个是三个部分组成而已。
Architecture,我们这次用行为来写它,behaviour。
lcytms
发表于 2018-11-26 11:54:33
1010
这是testbench的行为。
这个就是testbench的框架。
在Verilog的时候,我们直接把待测试的抽象的模型例化过来。
这个时候我们仍然要例化,但是我们要预先声明,你不能直接做例化。
它是一个强数据类型的语句,或者说它是一个严谨的语句。
任何引用都必须先声明。
怎么声明呢?
组件,component and_gate_vh。
lcytms
发表于 2018-11-26 11:55:59
1011
End component。
一定是分号打在最末尾。
我们把端口的部分粘过来。
这个是做组件的声明。
只有做组件的声明,我们才可以引用这个组件。
然后我们再声明testbench内部的信号。
lcytms
发表于 2018-11-26 11:56:52
1012
就相当于我们在Verilog里面声明的reg信号。
VHDL里面就简化了,这是它的可爱之处。
它不需要你判断哪些信号是reg,哪些信号是wire。
在Verilog里面是行为驱动的信号是声明成reg。
非行为的声明成线。
声明之前,设计者你要判断一下。
VHDL没有这个限制。
要么声明成signal信号,要么声明成变量。
现在我们肯定声明成信号了。
lcytms
发表于 2018-11-26 11:57:52
1013
VHDL的可恨之处,就是它一定要绑定一个数据类型。
Std_logic,标准逻辑类型。
稍后我们在数据类型的时候再精确讨论。
你不用顾及哪个是寄存器,哪个是线,哪个是输入,哪个是输出。
它们都是std_logic。