Board logo

标题: 关于VHDL程序,为什么这么简单的功能都不好实现 [打印本页]

作者: qin    时间: 2003-8-26 09:34

我做了一个如下的程序,看看符合你的要求吗? library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is port( clk:in std_logic; reset:in std_logic; a:in std_logic_vector(1 downto 0); b:in std_logic_vector(1 downto 0); c:in std_logic_vector(1 downto 0); dut std_logic_vector(4 downto 0) ); end test; architecture rtl of test is signal pc:std_logic_vector(4 downto 0); signal i:std_logic_vector(1 downto 0); signal en:std_logic; begin process(clk,reset) variable add_a:std_logic_vector(4 downto 0); variable add_b:std_logic_vector(4 downto 0); variable temp:std_logic_vector(4 downto 0); begin add_a:="000"&a; if(reset='0')then pc<="00000"; i<="00"; en<='1'; elsif (clk'event and clk='1')then if(en='1')then if(i<=c)then add_b(3 downto 0):=i*b; add_b(4):='0'; else en<='0'; end if; temp:=add_a+add_b; if(pc=temp)then d<=pc; i<=i+1; pc<=pc+1; else pc<=pc+1; end if; end if; end if; end process; end rtl;
作者: long    时间: 2003-8-27 10:05     标题: 还有疑问

谢谢你,我看懂了你的程序,也觉得很有道理,但在波形仿真中出错,首先是pc计数时不对,其次i并不能依次连续增1(这也是我最迷惑处),当位数更多时,出的错也莫名        其妙。我现在在试着用你的编程思想改动我的程序,以前编程考虑的不严谨,总有警告:width mismatch ...等等,但一般的书上也不讲这些,试问如何学习?
作者: ljp    时间: 2003-8-27 10:26

警告:width mismatch ...这些警告很普通的,英文看看不就懂了吗?               
width mismatch ...说总线的宽度不匹配,比如:你定义了10位宽的信号a,但只用了8位的信号b对他赋值,当然不匹配了。               
解决警告的最好办法是多试几次,比如他说你的第几行出错了,就把那一行好好看看,换个写法等等。另外一个好的编译软件必不可少,这样他的出错信息会好懂一些。       
推荐:初学者用aldec active 4.2 或 5.1,有一定功底后在自行选择软件。该软件可到www.aldec.com下载。license嘛,网上有。
作者: long    时间: 2003-8-27 10:26     标题: 关于VHDL程序,为什么这么简单的功能都不好实现

我的程序中,pc是计数器的计数值,我想把满足pc=A+i*B,(i=0,1,2,...C)(其中A,B,C都是待输入的整数)的pc挑出来,但尝试了for-loop,while-loop等语句都编译通过不了,也用过在if-else语句中自加或自减,都不行。请教各位,像这样的功能怎        么实现,是不是只能用循环,还是有别的编程方法




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0