16位的奇偶校验器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
学生姓名学号
班级电子信息工程
院系信院电子系
题目16位的奇偶校验器设计
指导教师
2012 年 5 月
题目一:设计一个16位的奇偶校验器,并仿真验证其功能。(1班1组)
(要求:输入一个16位的矢量数值,统计矢量中“1”的个数;并判断16位数中1的个数的奇偶性)
1、设计思路
2、VHDL程序(或原理图)
3、仿真波形(图片)
4、程序分析
1,设计思路如下:
可以使用FOR_LOOP语句,语法格式如下:
[LOOP标号: ] FOR 循环变量,IN 循环次数范围LOOP
顺序语句
END LOOP [LOOP标号];
FOR后的“循环变量”是一个临时变量,属LOOP语句的局部变量,不必事先定义。
“循环次数范围”规定LOOP语句中的顺序语句被执行的次数。循环变量从循环次数数范围的初值开始,每执行完一次顺序语句后递增1,直至达到循环次数范围指定的最大值。
其中定义输入端口十六位的数据总线为a, 输出端口y将其奇偶校验的结果输出, 输出端c统计1 的个数
2,VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY parity_check IS
PORT (a:IN STD_LOGIC_VECTOR (15 DOWNTO 0); y:OUT STD_LOGIC;
c:out integer range 0 to 16);
END parity_check;
ARCHITECTURE arch OF parity_check IS
BEGIN
PROCESS(a)
V ARIABLE temp:STD_LOGIC;
V ARIABLE m: INTEGER RANGE 0 TO 16; BEGIN
temp:='0';
m:=0; --偶校验初始值设为0,奇校验初始值设为1 FOR i IN 0 TO 15 LOOP
temp:=temp XOR a(i);
IF (a(i)='1') THEN m:=m+1;
END IF;
END LOOP;
y<=temp;
c<=m;
END PROCESS;
END arch;
原理图如下:
3,仿真波形如下:
程序分析
实体:
实体名parity_check
输入端口十六位的数据总线a:IN STD_LOGIC_VECTOR (15 DOWNTO 0)
输出端口y:OUT STD_LOGIC;将其奇偶校验的结果输出
若为奇数个1 输出为高电平;若为偶数个1输出为低电平
输出端c:out integer range 0 to 16)统计1 的个数
结构体:
结构体名arch
在进程PROCESS(a)中定义变量
V ARIABLE temp:STD_LOGIC;
V ARIABLE m: INTEGER RANGE 0 TO 16; 并进行变量的赋值
temp:='0';
m:=0;
loop循环
FOR i IN 0 TO 15 LOOP
temp:=temp XOR a(i);
IF (a(i)='1') THEN m:=m+1;
END IF;
END LOOP;
Temp与a(i)异或将其结果赋给temp
If语句
若a(i)为1 m加1计数
将其m的计数结果赋给c c 即为a中1 的个数