77范文网 - 专业文章范例文档资料分享平台

16位ALUVHDL实现源程序

来源:网络收集 时间:2021-09-24 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

FPGA16位ALU的VHDL源程序,有详细注释。

思考题: 编写十六位运算器的VHDL程序——MYALU

实验任务:用CPT16 的扩展实验板上的开关K3 、K2、K1、K0做为输入、八段数码

管LED0..LED3做为输出,用VHDL语言编写程序,下载到EP1C6中,实现十六位模型机的MYALU 功能见下表。

实验说明: 在MYALU.VHD程序设计中,定义

A 为16位累加器,其值由K3 、K2 两组开关输入;

W 为16位工作寄存器,其值由K1、 K0 两组开关共输入;

S2、S1、S0 为运算功能控制位,接在K4开关的第2、1、0个开关上,根

据S2、S1、S0 的不同,MYALU 实现不同功能

D为运算结果输出,显示在四位八段管LED3..LED0上;

CIn 为进位输入,由K4 开关组的第3 个开关输入;

COut 为进位输出,用发光二极管L0 显示其状态。

逻辑功能:

library ieee; ------库程序包调用 use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

FPGA16位ALU的VHDL源程序,有详细注释。

entity asanxia is ------实体:电路外观配置

port

(inA : IN UNSIGNED(15 DOWNTO 0); -- K3, K2 inA

inW : IN UNSIGNED(15 DOWNTO 0); -- K1, K0 inW

outLED : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -- LED3~LED0 outLED inC : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --Control Input inC

Cin:IN STD_LOGIC; --C Input k4.3 Cin

Cout: OUT STD_LOGIC -- C Output L0 Cout

);

end asanxia;

architecture arch of asanxia is ------结构体:电路功能描述

--中间变量

signal c:std_logic_vector(15 downto 0); --暂存进位信号

signal q:UNSIGNED(15 downto 0); --暂存各位数值

begin

process(inC,inA,inW,Cin)

begin

case inC is

when "000"=> ------加法:A+B ;A+B+1

q(0)<=inA(0)xor inW(0)xor Cin;

c(0)<=(inA(0) and inW(0))or (inW(0)and Cin)or (inA(0)and Cin); --inA(0),inW(0),Cin有两个以上为1即产生进位。 gen1:for i in 1 to 15 loop

q(i)<=inA(i)xor inW(i)xor c(i-1);

--本位和进位异或,产生不用and,因q(i)只能存储一位信息

c(i)<=( inA(i) and inW(i))or (inW(i)and c(i-1))or (inA(i)and c(i-1));

-- inA(0),inW(0),Cin有两个以上为1即产生进位。

end loop;

outLED<=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0); --给输出赋值,将各位连缀起来

Cout<=c(15);

when "001"=> ------减法:A-B ;A-B-1

q(0)<=inA(0)xor inW(0)xor Cin;

c(0)<=(not inA(0) and inW(0))or (inW(0)and Cin)or (not inA(0)and Cin);

gen2:for i in 1 to 15 loop

q(i)<=inA(i)xor inW(i)xor c(i-1);

c(i)<=(not inA(i) and inW(i))or (inW(i)and c(i-1))or (not inA(i)and c(i-1));

end loop;

FPGA16位ALU的VHDL源程序,有详细注释。

outLED<=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0); --给输出赋值

Cout<=c(15);

when "010"=>

if Cin='0'then

outLED<=inA+1; --执行a+1

end if;

Cout<='0';

when "011"=>

if Cin='0'then

outLED<=inA-1; --执行a-1

end if;

Cout<='0';

when "100"=> --逻辑与:AB

gen3:for i in 0 to 15 loop

q(i)<=inA(i)and inW(i);

outLED<=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(

3)&q(2)&q(1)&q(0); --给输出赋值

end loop;

when "101"=> --逻辑或:A+B

gen4:for i in 0 to 15 loop

q(i)<=inA(i)or inW(i);

outLED<=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(

3)&q(2)&q(1)&q(0); --给输出赋值

end loop;

when "110"=> --异或:A⊕B

gen5:for i in 0 to 15 loop

q(i)<=inA(i)xor inW(i);

outLED<=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(

3)&q(2)&q(1)&q(0); --给输出赋值

end loop;

when others=> --逻辑非:

outLED<=not inA(15)&not inA(14)& not inA(13)& not inA(12)&not inA(11)& not inA(10)& not inA(9)& not inA(8)&not inA(7)& not inA(6)& not inA(5)& not inA(4)&not inA(3)& not inA(2)& not inA(1)& not inA(0);

Cout<='0';

end case;

end process;

end arch;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说高考高中16位ALUVHDL实现源程序在线全文阅读。

16位ALUVHDL实现源程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/gaokaogaozhong/1249696.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: