请选择 进入手机版 | 继续访问电脑版

fpga论坛|fpga设计论坛

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

跟李凡老师学FPGA之D100:FPGA 100天总结(20170520课堂笔记)

[复制链接]
 楼主| lcytms 发表于 2017-6-10 23:23:25 | 显示全部楼层
1031
        这个带来了一个问题。
        据说米德体系下面早期是用时标来做。
        1ns,1ms,1ps,用时标来做。
        这个时候时标由设计者来决定。
        可是时标选大了不合适,选小了CPU的开销非常大,这个CPU每时每刻都要来处理这段行为。
        所以在米德体系下面就想了一个办法,仅仅在需要的时候,仅仅由设计者来决定,需要的时候,非综合目的,让它来执行它。
        所以说列出来@信号敏感表,在信号敏感表里面的信号发生变更的时候,非综合目的才来处理它。
        这个时候,CPU的开销就很小了。
        就是信号敏感表里面的信号发生变更的时候。
        所以说在VHDL,严谨的EDA的体系下面,信号敏感表是和综合无关的。
 楼主| lcytms 发表于 2017-6-10 23:24:43 | 显示全部楼层
1032
        Moorby的体系一开始也是这么做的,也发现了同样的问题。
        所以说Moorby也加上去了,但是呢,他的团队又没有完全注意到以前的米德的思想,就是综合跟信号敏感表无关。
        它有关了。
        它是怎么做的呢?
        它是把信号敏感表里面列出了沿敏感信号,如果信号敏感表里面列出了有且有一个沿敏感信号。
        这个叫什么名字不重要,重要的是它没有出现在begin块里面。
        有且有一个沿敏感信号未被引用,它说这个时候综合器才真正地会综合出一个寄存器来。
        我们把它的begin块里面全部写成FA。
        被引用的是输入,被驱动的是输出。
        那么你写FA,综合就会得到FA。
        FA被引用的是输入,被驱动的是输出。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:26:09 | 显示全部楼层
1033
        如果信号敏感表里面,有且有一个沿敏感信号未被引用。
        有两个未被引用不是,是跨时钟域。
        没有沿敏感信号不是,是电平敏感。
        有且有一个未被引用,那么Moorby他会送你一个寄存器。
        他是这么做的。送一个寄存器。
        你在这个FA里面,凡是在FA里面的输出信号,都会被这个寄存器捕获了以后,用这个时钟,唯一的一个未被引用的沿敏感信号,用它驱动。
        所以说呢,这个就是CSS讨论,这样写代码,就一定会综合出这个结构,他一定会送你一个寄存器。
        并且我们称之为开节点。
        开节点、闭节点是同步电路的范畴。
        在这里面作为它的基础,我们已经做过介绍。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:27:42 | 显示全部楼层
1034
        那么这样的话呢,用一个always语句块,写这个架构,称之为一段式。
        两个,两段式。
        三个,三段式。
        然后呢,我们来看,写代码的时候,这段代码里面,被引用的信号是输入,被驱动的信号是输出。
        称之为它的代码模型。
        这是它的理论模型。
        然后我们看它的一段式的代码模型。
        代码里面,被引用的是输入,被驱动的是输出。
        那么我们称之为闭节点。
        一段的代码模型。就是用一个always语句块来写。
        Begin块里面,哪些信号被引用了?
        哪些信号被驱动了?
        被引用的信号应该出现在赋值号的右侧,if、case的括弧里面。
        被驱动的信号应该出现在赋值号的左侧。
        如果是沿敏感,这个应该是非阻塞。
        我们现在至芯的教学一直沿用的是经典的,好,它应该是怎样的代码模型。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:29:17 | 显示全部楼层
1035
        在一段里面,那个state,既会被引用,又会被驱动,是不是?
        我们只需要声明一个state,因为那个NS看不到的。
        就一个CS。
        这个之间的装配关系我就不做复习了。
        我就把代码模型写一下。
        NS没有,就一个CS。
        既然是CS,我们就称之为state。
        所以说一段式的时候,我们总是写state。
        这个state呢,我们写在代码里面,我们会写成case (state),这个state是被引用的。
        然后呢,我们会驱动它,在哪个状态下面,state被转到什么地方?
        所以state又是输出。
        对于它而言,就是它的两个端口,一个是state的输入端口,是出现在case语句里面。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:30:42 | 显示全部楼层
1036
        一个是它的输出端口。
        输入被引用,输出被驱动。
        是它的两个端口,只不过同名而已。
        同名就意味着什么呢?
        在这个代码块所处的上层,是同一个信号,形成迭代。
        由于是闭节点,允许迭代。
        所以说,state,一段式,它一定是它的两个端口。
        一个是被引用的输入端口,一个是被驱动的输出端口。
        然后呢就是状态机的信号,状态机给出的输入信号。
        状态机给出的输出信号。
        这两个信号之间也允许迭代。
        一个经典的例子就是那个cnt。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:33:26 | 显示全部楼层
1037
        Cnt,既引用了它,又驱动了它。
        复位的时候,我们会让cnt=0,然后呢,我们可能会写成cnt=cnt+1这种形式,既出现在赋值号的左侧,是被驱动的信号。
        又出现在赋值号的右侧,是输入信号。
        所以说,它有可能会形成迭代,是允许的。
        某些信号是允许迭代的。
        因为它是闭节点,这个呢,就是一段的代码模型,这个我们应该很熟悉了。
        我们至芯的课程,我们一直强调,我们三段都能够非常自由地转换了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:34:44 | 显示全部楼层
1038
        你能写一段,你就能写两段,就能写三段。
        应该很容易的。
        这是一段。
        两段是用两个always语句块来写。
        两个always语句块的代码模型,第一段是一个闭节点,打两撇我们表示闭节点,这是状态机的两段的第一段。
        我注意到国内有一些EDA的工程师,对基础的理论引进的不够,或者是他们的阅读量不够,一段的写法,有各种写法。
        我们至芯的同学写的比较规范,跟国际比较接轨。
        如果你不知道这个模型,你就会在一段里面还写复位,还写控制。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:36:15 | 显示全部楼层
1039
        它一段的模型就是这样。
        输入的是NS,输出的是CS。
        它没有别的信号。
        在这个循环行为体里面,只有一个NS是输入,只有一个CS是输出。
        在这个begin end块里面,只有一个信号被驱动了,就是CS。
        它写的就是这个模型的寄存器。
        如果你用其它的方式写,你就得不到这个模型了。
        没有这个模型,就得不到状态机的性能支持了。
        那就不是状态机了,可以说。
        然后是第二段,第二段是开节点。
        开节点输入CS,输出NS。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2017-6-10 23:37:27 | 显示全部楼层
1040
        然后是现场的输入,现场的输出。
        引用的是输入,驱动的是输出。
        当做两段的时候,是把这个部分,REG放进来,然后呢,写它的描述的时候呢,是用开节点写。
        开节点就是种瓜得瓜种豆得豆。
        当然会写ST,放到上面,把摩尔或者米利放到上面。
        那么就会得到对应的结构。
        这个是开节点的输出,所以说呢,开节点的输出是一个完备的、充分必要的理论级的模型。
        就是理论级模型里面的框架、部件,它一个不多一个不少。
        但是一段、三段,都会多出一个输出寄存器,在米粒和摩尔后面多出一个输出寄存器。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|FPGA论坛 ( 京ICP备20003123号-1 )

GMT+8, 2021-10-29 01:49 , Processed in 0.063576 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表