这个星期做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的问题终于解决了!相关推荐

  1. 终于解决了贴吧手机版的一个重大BUG

    终于解决了贴吧手机版的一个重大BUG 别诧异虽然同一个域名,但是,PC 和手机打开完全不一样的体验 http://tieba.yunxunmi.com/ 吃点夜校准备做梦去!! 发现 我云贴吧 一个  ...

  2. mysql升级后乱码_mysql 升级引起的乱码问题,今天终于解决了。。。。

    在google baidu 搜索出来的结果,千篇一律,都一样.按照其说明升级,完了后依然是乱码. 这几天,自己研究了下mysql的 mysqldump和source这两个命令,终于解决了升级乱码问题. ...

  3. [终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

    大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 [note]免驱版只能 ...

  4. 终于解决了不能打开网页,但是可以聊天的问题。。。

    终于解决了不能打开网页,但是可以聊天的问题... 昨天,不知道怎么样回事,电脑居然不能打开网页了,真是让人郁闷,我想可能是中毒了,毕竟现在的rootkit 程序太多 真是防不慎防,KAV 有事也是检测 ...

  5. 困扰许久的文泉驿显示慢问题终于解决了

    前言:很久没写了.5月忙着申请Google Summer of Code,六月忙着申请实习,现在忙着实习,果然,blog只有闲着的时候才能写-- 现在在 北京千橡实习中,做ATL/WTL,一切都还算顺 ...

  6. Appserver配置sqlserver数据库心得。(花费了好久终于解决了)

    Appserver配置中自带与mysql数据库配置,若要连接sqlserver数据库则需要首先解压SQLSRV32到php版本中,找到对应版本,可以用 <?php Phpinfo(); ?> ...

  7. [ECSHOP] 终于解决ECSHOP的购物车自动清空问题,改善会员体验

    [ECSHOP] 终于解决ECSHOP的购物车自动清空问题,改善会员体验 作者:magentoon    2013-9-5 13:44  查看: 2831|回复: 0   ECSHOP程序的购物车会自 ...

  8. php closewait,CLOSE_WAIT问题终于解决了。

    CLOSE_WAIT问题终于解决了. 首先我要多谢tonykorn97,他的Blog: http://tonykorn97.itpub.net/index.php 一篇对我非常有用的文章!(我在下面引 ...

  9. python导入openpyxl报错问题,终于解决啦

    python导入openpyxl报错问题,终于解决啦 参考文章: (1)python导入openpyxl报错问题,终于解决啦 (2)https://www.cnblogs.com/guotang/p/ ...

最新文章

  1. 最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
  2. mysql索引 物理文件_MySQL架构和MySQL索引
  3. as3.0-----计时器的使用实例
  4. python3.8.2中文手册chm_springboot2.2.X手册:构建全局唯一的短链接数据中心
  5. linux应用开发:日志记录
  6. 前端学习(2777):组件之间的通讯方式
  7. Is it cold in Shinjuku?
  8. 递归5--汉诺塔问题的栈实现
  9. Linux系统中输入输出管理
  10. 以xml html编写的的学生管理系统,基于.NET和XML的学生中心数据库管理系统的研究与实现...
  11. STM32CubeMX GPIO的使用
  12. Maven常用插件配置和使用
  13. 【Monte Carlo】一种器件参数变化分析
  14. Roundpic:超简单的在线图片圆角处理~
  15. Cent OS7的安装
  16. [附源码]JAVA+ssm基于Internet快递柜管理系统(程序+Lw)
  17. 服务器多网卡多路由策略
  18. Shannon 香农编码 信息论实验 c++
  19. 程序员必须要掌握的 Git 操作技巧
  20. python初学 菜鸟

热门文章

  1. Python下面向对象的三大实例
  2. java调用python脚本_调用Python写vb的脚本方法
  3. 奥南朵 | 21天提升幸福感正念冥想
  4. pytorch教程:Flatten类实现的模版
  5. 2019 fall CS224w:01-intro
  6. 去中心化NFT交易生态系统Mochi.Market将在DAO Pad进行SHO
  7. 美国歌手西恩·列侬以3200美元WETH出售NFT艺术品
  8. SAP License:SAP一个成功的案例之跳槽者必看
  9. 互金策略若干问题(全)
  10. 原型化系统---失物招领APP