芙蓉王
发表于 2016-12-12 16:25:38
感谢楼主分享
lcytms
发表于 2016-12-18 22:28:22
1129
设置好仿真。
在verilog里面,什么信号应该声明成reg,什么信号应该声明成线呢?
是一个老生常谈的问题,但是现在我们讨论了。
实质上,我们做了今天的学习,就应该非常清楚这件事情,而且永远不会错。
就是你只要记住这样一个事实,是行为语句的输出就声明成reg,没有错,非行为语句,除了行为语句,其它的任何语句,就是线,这是很好记的。
在行为语句的代码里面,有一个信号出现在赋值号的左侧,这个信号就一定要声明成reg,非行为语句就是线。
lcytms
发表于 2016-12-18 22:30:05
1130
查看仿真波形。
现在我们看到,当s为低电平的时候,是短周期的a输出,当s为高电平的时候,是长周期的b输出。
和我们之前数据里做的完全相同,不同的描述得到不同的结果,这个呢就是行为的描述。
行为是一个非常重要的描述方式,带来效率的提升。
在做行为的时候呢,我们也注意这两件事实,一是它的可综合性,要做到综合友好,得知道什么样的行为,得到什么样的代码。
lcytms
发表于 2016-12-18 22:32:49
1131
反之,你需要什么样的电路,用什么样的行为语句来描述。
我们稍后会有一门课程,称之为CSS,coding style for synthesis,就是面向综合的编码风格。
这门课程会精确地讨论,what statements,what circuit,反之,什么样的电路,用什么样的代码描述。
一定要有这个知识,你才能够把综合写好,做到综合友好。
下面呢,我们来写它的结构。
也就说,行为语句的时候,是真正做到了只描述what to do,而没有描述how to do。
可是结构化的时候,显然是既要描述what to do,也需要描述how to do。
lcytms
发表于 2016-12-18 22:35:05
1132
并且真正是站在电子电路设计的角度上,有点还原到返璞归真了,回到原始的设计上。
但是呢,虽然它的效率降低,但是它却带来了核心技术,带来了创造力。
一些竞争性的想法,具有核心技术的想法,具有专利的想法,是在结构化上实现的,现在我们就来做它的结构化。
同样是这个双输入与门。
结构化就意味着what to do、how to do都要结合,how to do就是如何用电路来实现,这个时候回到了事情的本质上,需要这个布尔表达式,F=A•~S + B•S。
what to do只描述了这么一个事实,S为真值的时候B输出,S为假值的时候B输出。
但是如果how to do呢,要回到本质问题上,要用逻辑门来实现。
根据这个布尔表达式,有两个与门,一个或门,一个非门,两个逻辑要用类似的逻辑门来实现。
lcytms
发表于 2016-12-18 22:36:45
1133
两个与门我们绘制出来。
lcytms
发表于 2016-12-18 22:40:24
1134
现在才返璞归真,回到了电路设计的本质上。
这张图的电子设计的思想,是用逻辑门来实现的。
逻辑门来实现how to do,如何来做这件事情。
What to do的语言描述,how to do的语言描述,结构化。
那么我们把这段代码做出来,这段代码呢,我们用verilog的底层原语。
底层原语它支持非门、与门、或门,甚至与非、或非,它都支持,门级原语。
我们需要做的呢就是,输入信号有了,已经声明出来,然后呢我们还需要把它的实例声明出来。
1135
实例呢,我们把反相器的实例名标为U1,然后呢,U2、U3、U4,然后呢,这个构成了结构的部件。
这个部分就是我们的mux2。mux2的建模,出了这个方框的,就是端口,在方框内部的,就是中间信号。
同样新建一个,另存为mux2_structure.v,我们用结构化来做。
使用结构化的时候呢,也必须设置为顶层,然后一仿真的时候,综合的时候,EDA支持它,这个时候才能在Hierarchy这棵树上找到它。
lcytms
发表于 2016-12-18 22:42:40
1136
我们刚才已经说了,凡是行为输出的都是reg,非行为的都是线,所以说呢,这些信号肯定都是非行为的。
中间信号有三个,分别是s_n、bs、as_n,然后呢,我们来做它的门级原语。
门级原语,首先写它的非门。
lcytms
发表于 2016-12-18 22:44:34
1137
非门的门级原语就是not,是u1,第一个参数是输出,其它是输入的重载。
然后呢,我们再准备与门and,是u2。
还有u3。
或门,u4。
lcytms
发表于 2016-12-18 22:45:55
1138
填写参数。这就构成了结构的顶层的代码。Ctrl+S、Ctrl+K。