BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #21534同步于 2012/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

[VHDL]问题出在哪?请好心的VHDL语言高手指点下

houyi
2012/10/27镜像同步1 回复
设计要求: 设计制作一个简易计算器。 实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位8421bcd码输入。 能够实现多次连算(无优先级,从左到右计算结果),如 12+34×56-78=2498。 ------------------------------------------------------- 下面的程序只设计了加法运算,但仿真结果很让人伤脑筋。 以下注释是后加的 ------------------------------------------------------- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY calc IS PORT( ptr: OUT INTEGER RANGE 0 TO 10; --用于显示当前状态值 input: IN STD_LOGIC_VECTOR(8 DOWNTO 1); --8个拨码开关 output: OUT INTEGER; --用于显示计算的结果值, clr: IN STD_LOGIC; --清零同时对result进行零赋值,sign进行‘+’赋值 newline: IN STD_LOGIC); --结束当前操作数或操作符输入,并将其存入对应信号对象 END calc; ARCHITECTURE exacute OF calc IS SIGNAL flag: INTEGER RANGE 0 TO 10; --flag值指示当前要操作的对象,例如,1时为第一个操作数 --2时为第二个操作符,3时为第三个操作数并计算,将结果 --存入result中 SIGNAL result: INTEGER RANGE 0 TO 999999; --用于存储历史计算值并作为第一个操作数 SIGNAL sign: STD_LOGIC_VECTOR(4 DOWNTO 1); BEGIN p1:PROCESS(clr, newline) VARIABLE op: INTEGER RANGE 0 TO 99; VARIABLE op2: INTEGER RANGE 0 TO 999999; BEGIN IF clr = '1' THEN --用于判断信号上升沿,不知这种写法是否有错??? result <= 0; sign <= "0001"; flag <= 3; ptr <= 3; ELSIF newline = '1' THEN IF flag = 2 THEN sign <= input(4 DOWNTO 1); flag <= 3; ptr <= 3; ELSIF flag = 3 THEN CASE input(8 DOWNTO 5) IS WHEN "0001" => op:= 10; WHEN "0010" => op:= 20; WHEN "0011" => op:= 30; WHEN "0100" => op:= 40; WHEN "0101" => op:= 50; WHEN "0110" => op:= 60; WHEN "0111" => op:= 70; WHEN "1000" => op:= 80; WHEN "1001" => op:= 90; WHEN OTHERS => op:= 0; END CASE; CASE input(4 DOWNTO 1) IS WHEN "0001" => op:= op +1; WHEN "0010" => op:= op +2; WHEN "0011" => op:= op +3; WHEN "0100" => op:= op +4; WHEN "0101" => op:= op +5; WHEN "0110" => op:= op +6; WHEN "0111" => op:= op +7; WHEN "1000" => op:= op +8; WHEN "1001" => op:= op +9; WHEN OTHERS => NULL; END CASE; op2 := result; CASE sign IS WHEN "0001" => result <= op2 + op; WHEN OTHERS => NULL; END CASE; flag <= 2; ptr <= 2; END IF; END IF; END PROCESS p1; output <= result; END exacute; --------------------------------------------------------- 仿真结果图 仿真实现的2+1运算
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
lz183271438机器人#1 · 2012/11/5
感觉好乱的说,分模块来写吧,各模块用时钟信号同步~~