登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

求教VHDL对此程序编译有错

作者:kaka_987 栏目:EDA技术
求教VHDL对此程序编译有错
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity freqdi is
   PORT(sela,selb:in std_logic;
        clkin:in std_logic;
        clkout:out std_logic;
        clk100hz:out std_logic);
end freqdi;
architecture behav of freqdi is
   constant divi:integer:=10;
   constant divi_1:integer:=10_000;
   constant divi_2:integer:=100_000;
   constant divi_3:integer:=100_000;
   signal   muxval:integer range 4 downto 0;
  begin
   clk_div:PROCESS(clkin,sela,selb,muxval)
    variable cnt:integer range 0 to 9;
    variable cnt_1:integer range 0 to 9_999;
    variable cnt_2:integer range 0 to 99_999;
   begin
                       muxval<=0;
      if(sela='1')then muxval<=muxval+1;end if;
      if(selb='1')then muxval<=muxval+2;end if;
     if rising_edge(clkin)then
       case muxval is
         when 0=> if(cnt<(divi/2)) then
                     clkout<='1';
                     cnt:=cnt+1;  
                    elsif(cnt<(divi-1))then
                      clkout<='0';
                      cnt:=cnt+1;
                     else cnt:=0;
                      end if;
       when 1=>if(cnt_1<(divi_1/2)) then
                     clkout<='1';
                     cnt_1:=cnt_1+1;
                    elsif(cnt_1<(divi_1-1))then
                      clkout<='0';
                      cnt_1:=cnt_1+1;
                     else cnt_1:=0;
                      end if;
       when 2=>if(cnt_2<(divi_2/2)) then
                     clkout<='1';
                     cnt_2:=cnt_2+1;
                    elsif(cnt_2<(divi_2-1))then
                      clkout<='0';
                      cnt_2:=cnt_2+1;
                     else cnt_2:=0;
                      end if;
       when others=>null;
      end case;
    end if;
end PROCESS clk_div;
clk_100hz:PROCESS(clkin)is
    variable cnt_3:integer range 0 to 99_999;
   begin
     if rising_edge(clkin)then
        if(cnt_3<(divi_3/2)then
            clk100hz<='1';
            cnt_3:=cnt_3+1;
        elsif (cnt_3<(divi_3-1))then
            clk100hz<='0';
            cnt_3:=cnt_3+1;
         else cnt_3:=0;
         end if;
      end if;
end PROCESS clk_100hz;
end behav;


2楼: >>参与讨论
zxq916
你好!
你是指什么地方出错呀
是结果不对,还是语法错误呀?
但在clk_100hz:PROCESS(clkin)你有一个很低级的错误,是:
if(cnt_3<(divi_3/2)then少了一个后括号噢!呵呵
我改完一试就没有错了,
至于你要的结果是不是对的,我就不大清楚了噢!

3楼: >>参与讨论
kaka_987
谢谢
谢谢,我去调试一下看看

参与讨论
昵称:
讨论内容:
 
 
相关帖子
ISA 进行16BIT传输,怎么没有测试到有SBHE信号呢?
Xilinx下载线
邪门,10k10在protel中的sch引脚图与datasheet中的不一样(见图)!
altera下载问题?
招聘FPGA工程师
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号