|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
求教VHDL对此程序编译有错 |
作者:kaka_987 栏目:EDA技术 |
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 于 2006/5/9 12:08:00 发布:
你好! 你是指什么地方出错呀 是结果不对,还是语法错误呀? 但在clk_100hz:PROCESS(clkin)你有一个很低级的错误,是: if(cnt_3<(divi_3/2)then少了一个后括号噢!呵呵 我改完一试就没有错了, 至于你要的结果是不是对的,我就不大清楚了噢! |
3楼: | >>参与讨论 |
作者: kaka_987 于 2006/5/9 19:41:00 发布:
谢谢 谢谢,我去调试一下看看 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |