我想问下我的vhdl程序的process语句的问题

我的程序sw是外部开关,led是发光二极管,clk是个兆赫的始终信号。当开关波动显示不同亮度,就是做个简单的pwm试验下。但是程序中分频后的CLK_L不对第二个proce... 我的程序 sw是外部开关,led是发光二极管,clk是个兆赫的始终信号。当开关波动显示不同亮度,就是做个简单的pwm试验下。但是程序中分频后的CLK_L不对第二个process产生作用,我的意思是第二个process并没有执行,请问下是什么问题,有什么需要注意的。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PWM_LED IS
PORT(
CLK:IN STD_LOGIC;
SW:IN STD_LOGIC_VECTOR(5 DOWNTO 0);
LED:OUT STD_LOGIC
);
END ENTITY;

ARCHITECTURE A OF PWM_LED IS
SIGNAL CLK_L :STD_LOGIC;
BEGIN

PROCESS(CLK)
VARIABLE COUNT_D:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF(CLK='1'AND CLK'LAST_VALUE='0'AND CLK'EVENT )THEN
COUNT_D:=COUNT_D+1;
IF(COUNT_D>"11111000")THEN COUNT_D:="00000000";
CLK_L<=COUNT_D(7);
END IF;
END IF;
END PROCESS;

PROCESS(CLK_L)
VARIABLE COUNT_X:STD_LOGIC_VECTOR(5 DOWNTO 0);
VARIABLE X :INTEGER RANGE 0 TO 5;
BEGIN
IF(CLK_L='0')THEN
COUNT_X:=SW;
LED<=COUNT_X(X);
X:=X+1;
IF(X=5)THEN X:=0;
END IF;
END IF;
END PROCESS;

END A;
该问题解决了 不是语法问题而是if里面的语句是顺序执行。
IF(COUNT_D>"11111000")THEN COUNT_D:="00000000";
CLK_L<=COUNT_D(7);该语句先把COUNT_D置0。那么我们的LK_L<=COUNT_D(7);永远是0,不会有任何变化,故第二process没执行,解决方式吧两个调换下就可以了。另外谢谢一楼,如改正后IF(CLK_L='0')THEN,则表示两种状态,如写上升沿有效则就只是着一种状态,就不会有很多警告了。
展开
 我来答
zsyalan
2011-07-24 · 超过14用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:20.8万
展开全部
把第一个process里的 CLK_L<=COUNT_D(7);
改成旁迟 CLK_L<= not CLK_L;试试
第二运槐李个process里的if 里加上 CLK_L'event 而且最好明尘也用上升沿
追问
不可用上升沿描述,这样会多加警告,另外clk-l是分频时钟,CLK_L<=COUNT_D(7);
就是为了分频。
启帆信息
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!... 点击进入详情页
本回答由启帆信息提供
百度网友2a22c54
2011-07-24
知道答主
回答量:9
采纳率:0%
帮助的人:6.9万
展开全部
X的作用域不对吧,应该把X搞成全局的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式