我想问下我的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,则表示两种状态,如写上升沿有效则就只是着一种状态,就不会有很多警告了。 展开
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,则表示两种状态,如写上升沿有效则就只是着一种状态,就不会有很多警告了。 展开
启帆信息
2024-11-19 广告
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!...
点击进入详情页
本回答由启帆信息提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询