返回信息流设计要求:
设计制作一个简易计算器。
实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位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运算
这是一条镜像帖。来源:北邮人论坛 / circuit / #21534同步于 2012/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
[VHDL]问题出在哪?请好心的VHDL语言高手指点下
houyi
2012/10/27镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复