打印

一个简单功能,如何VHDL实现?

[复制链接]
3304|22
手机看帖
扫描二维码
随时随地手机跟帖
沙发
wangjun403| | 2012-3-23 09:41 | 只看该作者
等待高手来解答

使用特权

评论回复
板凳
lip0201| | 2012-3-23 20:09 | 只看该作者
signal lcx1:STD_LOGIC;
signal lcx2:STD_LOGIC;
process(clk,A,B)
begin
lcx1<=A;
lcx2<=B;
if lcx1='0' and A='1'then
    C<-='1';
end if;
if lcx2='0' and B='1'then
    C<-='0';
end if;
END PROCESS;

使用特权

评论回复
地板
lip0201| | 2012-3-23 20:10 | 只看该作者
上面掉了一句,补上

signal lcx1:STD_LOGIC;
signal lcx2:STD_LOGIC;
process(clk,A,B)
begin
if clk'event and clk='1'then
lcx1<=A;
lcx2<=B;
if lcx1='0' and A='1'then
    C<-='1';
end if;
if lcx2='0' and B='1'then
    C<-='0';
end if;
end if;
END PROCESS;

使用特权

评论回复
5
lwq030736| | 2012-3-23 21:10 | 只看该作者
如果A和B同时上跳,你要什么结果?
1还是0?

使用特权

评论回复
6
diweo| | 2012-3-23 21:24 | 只看该作者
自己写一下,跑一下仿真看看波形就知道了。
哪怕是错了几次再得到正确的结果,都比你直接复制上面的代码并一次成功有意义的多。

使用特权

评论回复
7
情场探花|  楼主 | 2012-3-26 10:21 | 只看该作者
感谢4楼,但我要的是“用A和B的边沿来控制C的电平”,而你的意思是在时钟上跳沿对A/B采样,再根据A/B的电平控制C。
回答5楼:如果A和B同时变化,C的结果可以任意。

使用特权

评论回复
8
lwq030736| | 2012-3-26 13:30 | 只看该作者
7# 情场探花

如果A和B同时跳变,C的值不用管,并且A、B跳变的频率比时钟低的话
4楼的做法是对的,不过最好还是加上AB同时跳变时C的值
这样逻辑才比较完整

使用特权

评论回复
9
情场探花|  楼主 | 2012-3-26 13:49 | 只看该作者
lcx1<=A 之后,两者的值应该相等了,再执行 if (lcx1 = '0' and A='1'),似乎永远不会满足啊???

上面掉了一句,补上

signal lcx1:STD_LOGIC;
signal lcx2:STD_LOGIC;
process(clk,A,B)
begin
if clk'event and clk='1'then
lcx1
lip0201 发表于 2012-3-23 20:10

使用特权

评论回复
10
情场探花|  楼主 | 2012-3-26 16:27 | 只看该作者
刚才又尝试用枚举量:
type state_type is (s0, s1);
signal stt: state_type;
case stt is
  when s0 =>
    if (rising_edge(A))
       c<='1';
       stt <= s1;
    end if;
  when s1 =>
    if (rising_edge(B))
       c<='0';
       stt <= s0;
    end if;
end case;

虽然编译通过了,但仿真结果不对。C根本就没变化。

使用特权

评论回复
11
lwq030736| | 2012-3-26 16:56 | 只看该作者
9# 情场探花
你还没理解寄存器工作的原理
仔细翻下书,看下寄存器怎么工作的吧

使用特权

评论回复
12
情场探花|  楼主 | 2012-3-26 17:54 | 只看该作者
手头没有书啊:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(

使用特权

评论回复
13
远去的记忆| | 2012-3-26 19:16 | 只看该作者
推荐一本 呗……

使用特权

评论回复
14
GoldSunMonkey| | 2012-3-26 21:03 | 只看该作者
推荐一本 呗……
远去的** 发表于 2012-3-26 19:16
我是从这本书,开始的。
《EDA技术实用教程》

使用特权

评论回复
15
jiazhaohui| | 2012-4-9 22:58 | 只看该作者
可以用很简单的VHDL语言就设计好了,以下是程序:
signal D : STD_LOGIC;
D <= A + B;
process(D)
begin
if D'event and D='1'then
if A = '1' then
C <= '1';
elsif B = '1' then
C <= '0';
end if;
END PROCESS;

使用特权

评论回复
16
meitian51| | 2012-4-20 08:34 | 只看该作者
求解15楼,
D的数据类型为std_logic;
A,B也是std_logic;
D <= A + B这个表达式为错误操作,
怎么搞

使用特权

评论回复
17
jiazhaohui| | 2012-4-22 19:33 | 只看该作者
不好意思,D <= A + B应该改为D <= A OR B

使用特权

评论回复
18
drentsi| | 2012-4-23 20:33 | 只看该作者
直接例化FDDRRSE

使用特权

评论回复
19
shu081| | 2012-10-7 16:28 | 只看该作者
学到很多文化:victory:

使用特权

评论回复
20
GoldSunMonkey| | 2012-10-8 21:33 | 只看该作者
学到很多文化:victory:
shu081 发表于 2012-10-7 16:28
这个还有文化可以学习?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

1203

帖子

6

粉丝