在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2246|回复: 4

[求助] 急求高手编程指教

[复制链接]
发表于 2011-12-30 20:19:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
library ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity div_out is
port( din,clk:in std_logic;
chk:in std_logic_vector(7 downto 0);
en,reset:in std_logic;
div_clkut std_logic_vector(11 downto 0);
smut std_logic_vector(3 downto 0);  --A或0
qut std_logic_vector(7 downto 0));
end div_out;
architecture behav of div_out is
signal temp:std_logic_vector(7 downto 0);
signal count:integer range 0 to 7 :=0;
signal num: std_logic;
signal y:std_logic_vector(7 downto 0);
signal D:std_logic_vector(7 downto 0);
SIGNAL c :INTEGER RANGE 0 TO 8;
  signal m:STD_LOGIC_VECTOR(11 DOWNTO 0);
begin
p1:process(clk)
begin
if(clk'event and clk='1')then
m<="000000000000";
if(m="110000110100")then
m<= (OTHERS =>'0');
num <=NOT num;
else
m<=m+1;
end if;
end if;
end process p1;
div_clk<=num;
p2:process(en,reset,clk,din)
begin
if reset='0'then
count<=0;
temp<="00000000";
q<="00000000";
else if(en='1')
then if(clk'event and clk='1')then
if(count=7)then
temp(count)<=din;
y(count)<=din;
q<=temp;
count<=count-1;
else if(count<7and count>0)then
temp(count)<=din;
y(count)<=din;
count<=count-1;
else
temp(0)<=din;
y(0)<=din;
count<=7;
end if;
end if;
end if;
end if;
end if;
end process p2;
p3:process(clk,reset)
begin
D<=chk;
    if reset='0' then
       c<=0;
    elsif clk'event and clk='1' then  --时钟到来时,判断并处理当前输入的位
        CASE c IS
WHEN 0 =>   IF DIN =D(7) THEN c<= 1 ;ELSE c<=0;END IF;
WHEN 1 =>   IF DIN =D(6) THEN c<= 2 ;ELSE c<=0;END IF;
WHEN 2 =>   IF DIN =D(5) THEN c<= 3 ;ELSE c<=0;END IF;
WHEN 3 =>   IF DIN =D(4) THEN c<= 4 ;ELSE c<=0;END IF;
WHEN 4 =>   IF DIN =D(3) THEN c<= 5 ;ELSE c<=0;END IF;
WHEN 5 =>   IF DIN =D(2) THEN c<= 6 ;ELSE c<=0;END IF;
WHEN 6 =>   IF DIN =D(1) THEN c<= 7 ;ELSE c<=0;END IF;
WHEN 7 =>   IF DIN =D(0) THEN c<= 8 ;ELSE c<=0;END IF;
WHEN OTHERS => c<=0;
END CASE;
END IF;
END PROCESS ;
PROCESS(c)
BEGIN
      IF c=8  THEN sm<= "1010";      
      ELSE          sm<= "0000";              
      END IF ;
END PROCESS;
END behav;
在这个程序中,我在编译时,发现那个H<=H+1,总是出现不能定义加法操作,这是咋回事呀?求高手指教。
发表于 2011-12-30 21:01:03 | 显示全部楼层
vhdl中,不能出现 H <= H + 1这种写法,也就是自己驱动自己。
需要先定义一个variable, 然后variable = H; H = variable + 1(太久不用vhdl,具体语法不记得了,你自己修改到正确语法吧)
发表于 2011-12-30 21:21:01 | 显示全部楼层
这格式。。。建议楼主排一下版,没找到H <= H + 1
发表于 2011-12-31 08:56:32 | 显示全部楼层
好久没写  VHDL了
发表于 2012-1-4 08:17:18 | 显示全部楼层
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

在程序开头把这几个数据包添加上试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-13 03:59 , Processed in 0.033889 second(s), 11 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表