集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

跟李凡老师学FPGA之D02:EDA建模、HDL描述语言(20160424课堂笔记)

[复制链接]
 楼主| lcytms 发表于 2017-1-17 18:32:33 | 显示全部楼层
1414
        顶层已经是锁存器的行为。
        D锁存器,对应的用四个与非门,一个反相器构成的D锁存器。
        现在用行为来叙述。Ctrl+S、Ctrl+K。
        检查一下框架。
        行为几乎是站在人类的语言的描述上。
        你用这种方式描述,EDA就用这种方式理解。
        我可以事先把它声明成reg,因为我准备用行为来驱动它。
        这个q,一定会出现在行为语句的赋值号的左侧。
        什么是行为?
        if、case就是行为,这时候就事先把它声明成reg,一定是行为。
        既然用行为写,我们讲了三件事,第一,必须置于行为循环体;第二,输出必须声明成reg;第三,它必须有信号敏感表来告诉EDA什么时候来变更这段行为。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 18:34:56 | 显示全部楼层
1415
        信号敏感表,电平描述的时候,要描述锁存器,注意遵守一种约定。
        我们说,这样的描述,它就会得到这样的结构。
        所以说,我们现在是做这种描述,信号敏感表理面,我填上星号,也可以,填上具体的信号,就是d、en,也可以。
        一种简洁的方式,快捷的方式,而且安全的方式就是填*号,由EDA来填。
        我们用if语句,条件行为来描述这种行为。
        如果使能信号为真值的时候,这个输出q就穿透了,就为d。
        使能信号为假值的时候,我们把它保持住。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 18:37:03 | 显示全部楼层
1416
        我们只要做这样一种描述,使能信号为真值的时候,穿透用阻塞穿透,它为假值的时候,我们让它保持。
        让q=q,保持住。
        可以做这样的描述。
        更进一步地,我们可以看到,else这两行甚至可以不用写,不用写它就保持住了,形成了一个锁存器。
        我们把行为置于顶层。
        Ctrl+S、Ctrl+K。
        这个就是行为的描述。
        这段描述,就会得到这样的电路。
        这段电路现在是我们设计出来的。
        如果你不想设计,你只做这个行为的描述,EDA帮你做这件事。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 18:39:08 | 显示全部楼层
1417
        现在我们来写它的验证。
        新建verilog,另存为d_latch_behaviour_tb.v。
        我不从头写,我从D锁存器上复制过来。
        修改代码。
        去掉q_n信号。
        Ctrl+S。
        我们已经把D锁存器行为置为顶层了。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 21:59:11 | 显示全部楼层
1418
        重新设置仿真。查看仿真波形。
        跟我们刚刚看到的,我们用结构化写的,一模一样。
        时钟信号为高电平的时候穿透了。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 22:01:00 | 显示全部楼层
1419
        这个是行为,显然行为的描述带来了效率的提升。
        我只要用人类的语言来描述,如果怎么样,结果怎么样。
        现在我们在写一个D触发器的行为,D触发器,就是寄存器的行为,这个更具有现实意义。
        我们在编码的时候会大量应用的沿敏感。
        好,现在来写一个D类型的flipflop行为。
        将d_type_flipflop.v另存为d_type_flipflop_behaviour.v,把它置为顶层。
        修改代码。
        Ctrl+S、Ctrl+K。
        我先检查一下框架。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 22:08:45 | 显示全部楼层
1420
        我事先把q声明成reg,我们要用行为来写它。
        行为的驱动就声明成reg。
        就这么一个概念,非行为就写成线。
        所以说,我们事先就把它声明成reg,准备用行为驱动。
        然后就是总所周知的那种描述了,always描述。
        你就这样一个描述,EDA就对应得到这样一个结构。
        这是一种约定。
        然后呢,我们当然用人类的语言来描述啦。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 22:10:54 | 显示全部楼层
1421
        因为我们现在还没有写到复位,这个时候if语句都可以不用写,只有在复位的时候才做这件事。
        所以说做这样的描述的时候,我们只是把对应的在沿上面,在时钟沿的信号敏感表作用下面。
        信号敏感表本来是跟综合无关的,但这个时候有关,这是Moorby的一个特点,verilog团队当时犯的一个小错误,现在看来它有它的优点,它的好处。
        这个时候把输出q连接到d上,就这么一行,就解决问题。
        之前我们要大费周折,要从RS锁存器到D锁存器的构成,现在用行为语句叙述,竟然如此之简单。
        你只要这样描述,显然是一种约定,是一个语言的一种约定。
        你做这样的描述,就会得到这样的结构。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 22:12:55 | 显示全部楼层
1422
        就会得到主从的结构,主从的结构是EDA帮你实现的,是how to do,你描述的是what to do。
        Ctrl+S、Ctrl+K。
        并且呢,我们现在轻而易举地做到了改变沿,我只需要把pos改成neg,positive改成negative,从上升沿改成下降沿的触发。
        这就是一种高端的提升。
        现在我们写它的验证。
        新建verilog,另存为d_type_flipflop_behaviour_tb.v,同样地,从d_latch_behaviour_tb.v复制过来。
        修改代码。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-1-17 22:14:56 | 显示全部楼层
本帖最后由 lcytms 于 2017-1-17 22:18 编辑

1423
        现在只不过我们改成上升沿了。
        做仿真设置。
        只有非常清楚地了解到什么是行为,什么是非行为,HDL语言我们才能写得比较好,比较准确。
        很多国外的教材对这一点是喋喋不休,比较统一的认识,行为是描述what to do,非行为,还有结构化不仅要描述what to do,还要描述how to do。
        观察仿真波形。
  

本帖子中包含更多资源

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

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

本版积分规则

关闭

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

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

GMT+8, 2024-12-24 04:28 , Processed in 4.745469 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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