微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 小弟初学VHDL,看别人的结构写了个ALU的程序,但编译不过...

小弟初学VHDL,看别人的结构写了个ALU的程序,但编译不过...

时间:10-02 整理:3721RD 点击:

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE IEEE.std_logic_arith.ALL;

entity ALU is

port(cin: in std_logic;

alu_function: in std_logic_vector(2 downto 0);

a_in: in std_logic_vector(7 downto 0);

b_in: in std_logic_vector(7 downto 0);

alu_out: out std_logic_vector(7 downto 0);

z: out std_logic;

c: out std_logic;

v: out std_logic;

                s: out std_logic

);

end ALU;

Architecture win of ALU is

signal midout: std_logic_vector(15 downto 0);

signal temp: std_logic_vector(15 downto 0);

begin

process(a_in,b_in,alu_function)

constant ADD:std_logic_vector:="000";

constant SUB:std_logic_vector:="001";

constant ANDOP:std_logic_vector:="010";

constant OROP:std_logic_vector:="011";

constant XOROP:std_logic_vector:="100";

constant SHL:std_logic_vector:="101";

constant SHR:std_logic_vector:="110";

cinextend:="000000000000000"&cin;

begin

case alu_function is

when ADD=>midout midout midout midout midout midout midout midout<="ZZZZZZZZZZZZZZZZ";

end case;

if(alu_function="000" or "001")

    if(a_in(15)="1" and b_in(15)="1" and midout(15)="0") or (a_in(15)="0" and b_in(15)="0" and midout(15)="1" )

    then V<="1";

    else V<="0";

    end if;

end if;

if(alu_function="000")

then temp:="1111111111111111"-b_in-cinextend;

if temp<a_in then

      c<="1";

else c<="0";

end if;

else if(alu_function="001")

  if b_in<a_in then

      c<="1";

  else c="0";

  end if;

else if(alu_function="101")

c<a_in(15);

else if(alu_function="110")

c<=a_in(0);

else c<="0";

end if;

end process;

alu_out<=midout;

end win;

  非常感谢  非常感谢

?


你可以贴出综合不过 工具给出的提示是什么,有助于大家对你问题的解决。

谢谢!已经把错误贴出来了!求帮助啊!刚学这个,实在搞不大懂

给你一个简单的分析吧! 不过于受人渔,不是鱼;
下面一个错误
“Error (10500): VHDL syntax error at alu.vhd(29) near text "cinextend";  expecting "begin", or a declaration statement”
这么一行,说明在alu.vhd文件第29行 ,靠近cinextend 的 begin 或者是上面出问题了。
仔细看看这些部分的代码吧。
查找问题是,必须从最上面第一个开始处理,(因为第一个问题可能会导致下面很多问题,所以...)

大哥,谢谢哈。已经解决了。我现在又出现个问题,就是在做一个cpu。   每个模块编译仿真都是正确的,但采用原理图输入法连在一起后,再检测仿真时对模块的输出检测总是错误,例如节拍器状态转换,本来顺序是100,000,111但现在变成100,XX1,XXX   请问这是为什么?非常感谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top