这两个VHDL的问题终于解决了!
这个星期做EDA的课程设计,终于得用VHDL写一些东西了,而不仅仅是实验课的时候那样十几行就能解决了。
写长一点的时候,发现两个相当棘手的禁令啊:
1、一个进程内不能进行两次边沿检测。
2、不同进程不能对同一信号进行赋值。
正因为这两条“禁令”,让本来看上去很简单的东西搞得我焦头烂额了。
于是,我打算把事情简单化,做了两个这样的练习:
1、两个按键,分别控制一个值的加和减。(这个主要是为了解决“禁令1”)
2、一个按键,按下按键输出一个固定时间脉冲。(解决“禁令2”)
我先做的是第二个练习。如果没有禁令,我的想法是,一个进程内检测到按键信号上升沿的时候对信号A写‘1’,然后另外一个进程检测到信号A为‘1’时开始用时钟信号计时并输出,到时间后对这个信号A写‘0’。看上去十分简单,天衣无缝,但是因为“禁令2”,这个简单的方法不能实现。
我的解决方法是用了两个信号,并且还有优先级的区别:
1 Library IEEE; 2 Use IEEE.STD_LOGIC_1164.ALL; 3 4 Entity KeyClk Is 5 Port( 6 clk:in std_logic; 7 c_in:in std_logic; 8 c_out:out std_logic 9 ); 10 End; 11 12 Architecture one of keyclk is 13 signal out_flag,stop_flag:std_logic; 14 begin 15 16 17 process(c_in,out_flag) 18 begin 19 if c_in='1' then 20 out_flag<='1'; 21 elsif stop_flag='1' then 22 out_flag<='0'; 23 end if; 24 end process; 25 26 c_out<=in_flag; 27 28 process(clk,in_flag) 29 variable cnt:integer range 0 to 100; 30 begin 31 if rising_edge(clk) then 32 if out_flag='1' then 33 stop_flag<='0'; 34 if cnt<5 then 35 cnt := cnt+1; 36 37 else 38 cnt := 0; 39 stop_flag<='1'; 40 end if; 41 end if; 42 end if; 43 end process; 44 end;
第二个练习是这样的,貌似有点纠结:
1 library ieee; 2 use ieee.std_logic_1164.all; 3 use ieee.std_logic_unsigned.all; 4 5 entity twokey is 6 port( 7 clk:in std_logic; 8 key1,key2:in std_logic; 9 key_rst:in std_logic; 10 qout:out std_logic_vector(7 downto 0) 11 ); 12 end entity; 13 14 architecture one of twokey is 15 signal key1_down,key2_down:std_logic; 16 signal qout2:std_logic_vector(7 downto 0); 17 begin 18 process(key1,key2,key_rst,clk) 19 begin 20 if rising_edge(clk) then 21 if key_rst='1' then 22 qout2<=(others=>'0'); 23 else 24 if key1='1' and key1_down='0' then 25 key1_down<='1'; 26 qout2<=qout2+'1'; 27 elsif key1='0' then 28 key1_down<='0'; 29 end if; 30 if key2='1' and key2_down='0' then 31 key2_down<='1'; 32 qout2<=qout2-'1'; 33 elsif key2='0' then 34 key2_down<='0'; 35 end if; 36 end if; 37 end if; 38 end process; 39 qout<=qout2; 40 end;
转载于:https://www.cnblogs.com/fwindpeak/archive/2013/06/05/3118457.html
这两个VHDL的问题终于解决了!相关推荐
- 终于解决了贴吧手机版的一个重大BUG
终于解决了贴吧手机版的一个重大BUG 别诧异虽然同一个域名,但是,PC 和手机打开完全不一样的体验 http://tieba.yunxunmi.com/ 吃点夜校准备做梦去!! 发现 我云贴吧 一个 ...
- mysql升级后乱码_mysql 升级引起的乱码问题,今天终于解决了。。。。
在google baidu 搜索出来的结果,千篇一律,都一样.按照其说明升级,完了后依然是乱码. 这几天,自己研究了下mysql的 mysqldump和source这两个命令,终于解决了升级乱码问题. ...
- [终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n
大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 [note]免驱版只能 ...
- 终于解决了不能打开网页,但是可以聊天的问题。。。
终于解决了不能打开网页,但是可以聊天的问题... 昨天,不知道怎么样回事,电脑居然不能打开网页了,真是让人郁闷,我想可能是中毒了,毕竟现在的rootkit 程序太多 真是防不慎防,KAV 有事也是检测 ...
- 困扰许久的文泉驿显示慢问题终于解决了
前言:很久没写了.5月忙着申请Google Summer of Code,六月忙着申请实习,现在忙着实习,果然,blog只有闲着的时候才能写-- 现在在 北京千橡实习中,做ATL/WTL,一切都还算顺 ...
- Appserver配置sqlserver数据库心得。(花费了好久终于解决了)
Appserver配置中自带与mysql数据库配置,若要连接sqlserver数据库则需要首先解压SQLSRV32到php版本中,找到对应版本,可以用 <?php Phpinfo(); ?> ...
- [ECSHOP] 终于解决ECSHOP的购物车自动清空问题,改善会员体验
[ECSHOP] 终于解决ECSHOP的购物车自动清空问题,改善会员体验 作者:magentoon 2013-9-5 13:44 查看: 2831|回复: 0 ECSHOP程序的购物车会自 ...
- php closewait,CLOSE_WAIT问题终于解决了。
CLOSE_WAIT问题终于解决了. 首先我要多谢tonykorn97,他的Blog: http://tonykorn97.itpub.net/index.php 一篇对我非常有用的文章!(我在下面引 ...
- python导入openpyxl报错问题,终于解决啦
python导入openpyxl报错问题,终于解决啦 参考文章: (1)python导入openpyxl报错问题,终于解决啦 (2)https://www.cnblogs.com/guotang/p/ ...
最新文章
- 最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
- mysql索引 物理文件_MySQL架构和MySQL索引
- as3.0-----计时器的使用实例
- python3.8.2中文手册chm_springboot2.2.X手册:构建全局唯一的短链接数据中心
- linux应用开发:日志记录
- 前端学习(2777):组件之间的通讯方式
- Is it cold in Shinjuku?
- 递归5--汉诺塔问题的栈实现
- Linux系统中输入输出管理
- 以xml html编写的的学生管理系统,基于.NET和XML的学生中心数据库管理系统的研究与实现...
- STM32CubeMX GPIO的使用
- Maven常用插件配置和使用
- 【Monte Carlo】一种器件参数变化分析
- Roundpic:超简单的在线图片圆角处理~
- Cent OS7的安装
- [附源码]JAVA+ssm基于Internet快递柜管理系统(程序+Lw)
- 服务器多网卡多路由策略
- Shannon 香农编码 信息论实验 c++
- 程序员必须要掌握的 Git 操作技巧
- python初学 菜鸟