集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

跟李凡老师学FPGA之VHDL基础D01(20160720课堂笔记)

[复制链接]
 楼主| lcytms 发表于 2019-1-9 14:17:01 | 显示全部楼层
1331
        VHDL我给大家做一个时序逻辑,做一个计数器。
        状态机做一个。
        然后我们就布置下午的练习。
        下午的练习也很简单,就是把我们以前写过的流水灯也好,七段数码管也好,把它翻成VHDL。
 楼主| lcytms 发表于 2019-1-10 14:09:21 | 显示全部楼层
1332
        做一个计数器,做一个状态机。
        我们可以比较这两种方法,这两种语言。
        特别是关于行为的相同和不同之处。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-10 14:10:53 | 显示全部楼层
1333
        同样是新建工程向导,取名counter_vh。
        然后新建VHDL文件,另存为counter_vh.vhd。
        库声明。
  

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-10 14:11:44 | 显示全部楼层
1334
        实体。
        端口。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-10 14:14:01 | 显示全部楼层
1335
        写结构体。
        肯定是用行为写。
        Ctrl-S、Ctrl-K。
        检查一下框架。
        我们来写一个计数器的行为。
        大家注意VHDL和Verilog的一些重要区别。
        行为语句我们用像if、case的一些语句来写。
        这是行为的描述。
  

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-19 11:47:49 | 显示全部楼层
1336
        VHDL的信号敏感表,严格地遵循非综合的目的。
        哪些信号列出来,变更的时候会处理。
        时钟变更会处理。
        在VHDL里面没有沿事件。
        Q发生变化,我们也要讨论,因为q要加一。
        所以说是所有的信号。
        If是一个架构。
        如果我们要写一个同步复位,沿敏感的信号,在Verilog里面,会出现在信号敏感表里面,它跟综合有关。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-19 11:48:48 | 显示全部楼层
1337
        VHDL的信号敏感表,跟综合无关。
        综合的意义一定用条件来叙述。
        它可以这么来写。
        Clk的事件,同时clk为高,1就是一个上升沿,写成0就是下降沿。
        嵌套在沿事件里面的结构全部是同步的。
        如果你写同步复位,它的里面的是同步。
        它的外面的是异步。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-19 11:50:09 | 显示全部楼层
本帖最后由 lcytms 于 2019-1-22 21:15 编辑

1338
        我先这样写,然后我们会给出VHDL的经典使用的方法。
        Q清零。
        或者直接写16个0,更常用的写法是others。
        这样不论多少位都清零。
        置位以后q让它加一。
        我们先这样写,然后分析综合。
        它一定会报错。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-19 11:52:05 | 显示全部楼层
本帖最后由 lcytms 于 2019-1-22 21:14 编辑

1339
        本身这种写法,在Verilog里面是没有任何问题的。
        但VHDL它不干。
        它为什么不支持这种写法呢?
        就是由于它是强数据类型。
        分析综合。
        它直接报错。
        报q这个错。
        它说,q这个对象不能被读。
        Q这个对象它是一个输出类型。
        VHDL是强数据类型。
        强数据类型就要求,赋值号左右两侧的数据类型的属性要完全一致。
        Q的属性是输出,而这边是输入。
        解决的方案,可以把它改成buffer。
        但是VHDL典型的有一种处理方法,输出有的时候是不能改成buffer的。
        输出就是输出。
        Buffer是一个双向的嘛,一个缓冲器。
        它这个端口就是输出端口。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2019-1-19 11:53:18 | 显示全部楼层
本帖最后由 lcytms 于 2019-1-22 21:14 编辑

1340
        这个时候改成buffer是有条件的。
        现在我们这个条件如果不允许它改成buffer,怎么做?
        VHDL想出一个办法。
        声明一个中间信号,int_q。
        绑定它的数据类型为向量,15:0。
        中间信号没有声明方向。
        既可以用作输入,也可以用作输出。
        然后我们来驱动中间类型的q。
        中间类型的的q,它怎么变成端口呢?
        很简单。
        将q引出来即可。

本帖子中包含更多资源

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

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

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-20 11:46 , Processed in 0.076851 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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