摘要: 【连载】 FPGA Verilog HDL 系列实例 Verilog HDL 之 矩阵键盘接口1、矩阵键盘的原理 矩阵键盘又叫行列式键盘。用带IO口的线组成行列结构,按键设置在行列的交点上。例如用4×4的行列式结构可以构成16个键的键盘。这样,当按键数量平方增长时,I/O口只是线性增长,这样就可以节省I/O口。矩阵键盘的原理图如图1.1所示: 图1.1 矩阵键盘的原理图 按键设置在行列线交叉点,行列线分别连接到按键开关的两端。列线通过上拉电阻接3.3V电压,即列线的输出被钳位到高电平状态。 判断键盘中有无按键按下式通过行线送入扫描线好然后从列线读取状态得到的。其方法是依次给行线送低电 阅读全文
posted @ 2011-07-21 19:25 让linux飞一会儿 阅读(6658) 评论(6) 推荐(2)
摘要: 【连载】 FPGA Verilog HDL 系列实例Verilog HDL 之 乐曲演奏 我们都知道,乐曲由音调和音长组成,只要将音调和音长控制好就能演奏出动听的乐曲。下面将用Verilog HDL 硬件描述语言完成乐曲演奏的设计。1、音调的控制 频率的高低决定了音调的高低。图1.1是音调和音律之间的关系。 图1.1 音调和音律之间的关系 所有不同频率的信号都是从同一个基准频率分频得来的。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取证后的误差较大。若基准频率过高... 阅读全文
posted @ 2011-07-20 13:59 让linux飞一会儿 阅读(11628) 评论(21) 推荐(4)
摘要: Verilog HDL 之 8-3编码器原理: 在数字系统中,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律排列,例如8421码、格雷码等,使每组代码具有一特定的含义(代表某个数字或是控制信号)称为编码。具有编码功能的逻辑电路称为编码器。编码器有若干个输入,在某一时刻只有一个输入被转换为二进制码。例如8线-3线编码器和10线-4线编码器分别有8输入、3位输出和10位输入、4位输出。下面是8-3编码器的真值表。实验环境: 硬件:AR2000核心板、SOPC-MBoard板、PC 机、ByteBlaster II 下载电缆 软件:ModelSim 、Alter... 阅读全文
posted @ 2011-07-19 14:50 让linux飞一会儿 阅读(28059) 评论(1) 推荐(4)
摘要: Verilog HDL是一种用于数字系统设计的硬件描述语言,它可用来进行各种级别的逻辑设计,以及数字逻辑系统的仿真验证、时序分析和逻辑综合。Verilog HDL 是目前应用最广泛的一种硬件描述语言。 学好硬件的最高境界是心中要有电路,对于我们刚刚接触FPGA以及Verilog HDL的人来说,最重要的是要多理解,多练习,多思考,多总结。 下面将对Verilog HDL进行一系列的实例应用,让我们对Verilog HDL 语言有一些直观的理解,看看Verilog HDL能为我们做什么事。 PS:有颜色的是有对应链接的。一二部分总结比较简单,后面的部分可仔细看看。目录:一、组合逻辑实验... 阅读全文
posted @ 2011-07-19 10:30 让linux飞一会儿 阅读(17139) 评论(7) 推荐(7)
摘要: ◆多态性是面向对象程序设计语言继数据封装和集成之后的第三个基本特征。多态性和虚函数使得设计和实现易于扩展的系统成为可能。 ◆多态性是指,当调用某个对象的函数时,应该被执行的程序代码会根据对象的具体类型在执行期被确定下来。 ◆想要实现多台,就到进行“动态绑定”,在C++中,实现“动态绑定”的机制是虚函数。虚函数的声明方法是在基类的函数原型前加上关键字virtual。 ◆只有将派生类对象赋给基类对象引用或将派生类对象地址赋给基类对象指针时,才能够体现出多态性。 ◆抽象类不能实例化为对象,它的唯一用途是为其他类提供合适的基类,其他类可从它这里继承和实现接口。 ◆一个类如果是抽象类,则该类中至少有一. 阅读全文
posted @ 2011-06-07 19:42 让linux飞一会儿 阅读(1034) 评论(0) 推荐(1)
摘要: 1.1 什么是继承 在C++中,如果类C1通过继承已有类C而创建,则将C1称作派生类,将C称作基类,派生类会继承基类中定义的所有属性和方法。1.2 派生类的定义 定义派生类的语法为:1 Class 派生类名:继承方式 基类名2 {3 派生类成员说明;4 }; 其中,继承方式包括public、protected、private三种。1.3 函数重定义 对于基类中的函数,可以再派生类中对其重新定义、实现新的功能。 区别函数重定义和函数重载: 函数重载:要求函数形参不同,在实际调用时根据传入的实参来决定执行哪个函数。 函数重定义:要求派生类中的函数原型与基类中的函数原型一样,在实际调用时根据对象类型 阅读全文
posted @ 2011-06-07 16:07 让linux飞一会儿 阅读(515) 评论(0) 推荐(0)
摘要: 最近想使用Nios II里的并口PIO口进行双向操作,即需要输出的时候设置为输出方向,需要输入的时候设置为输入方向。在这期间,因为没认真仔细阅读参考文档,走了一点点的弯路。下面就简单的介绍下并行输入/输出PIO。PIO核概述 具有Avalon接口的并行输入/输出(parallel input/output - PIO)核,在Avalon存储器映射(Avalon Memory-Mapped Avalon-MM)从端口和通用I/O端口之间提供了一个存储器映射接口。I/O端口既可以连接片上用户逻辑,也可以连接到FPGA与外设连接的I/O引脚。 PIO核提供容易的I/O访问用户逻辑或外部设备,在这种. 阅读全文
posted @ 2011-06-06 10:08 让linux飞一会儿 阅读(4267) 评论(1) 推荐(2)
摘要: 类是现实世界中客观事物的抽象,即将具有相似静态属性和动态行为的对象集合归纳为一个类。类和对象是面向对象技术的核心。1.1 类的声明与定义类的声明形式:1 class<自定义类类型名>2 {3 [public:]4 [<共有成员说明表>]5 [private:]6 [<私有成员说明表>]7 };类的定义成员函数的定义形式如下:1 <函数类型><类名>::<函数名>(<形参数表>)2 {3 函数体4 }成员函数还可以再类中定义。1.2 对象对象的声明 声明对象的过程叫做类的实例化。先定义类类型,然后声明类对象的一般 阅读全文
posted @ 2011-06-05 15:52 让linux飞一会儿 阅读(711) 评论(0) 推荐(1)
摘要: 1.1 指针的概念 声明任何一个变量,系统都会为其分配一定大小的内存,访问变量实际上就是访问其所占据的内存空间。1.2 指针变量的声明、初始化和访问1.2.1 声明: 数据类型 *变量名1.2.2 初始化: 3种方式 (1)初始化为NULL或0:表示指针变量指向的是一片无效的不可访问的内存; 如: int *p= NULL;(NULL必须大写)(2)初始化为已声明变量的地址; 如: int a; int *p=&a; (指针变量的声明类型与其所指向的变量的类型必须一致,否则就要给出显式的强制类型转换)(3)初始化为某一动态分配内存空间的地址。1.2.3 指针变量的访问 可以通过该指针变 阅读全文
posted @ 2011-06-02 11:07 让linux飞一会儿 阅读(619) 评论(0) 推荐(1)
摘要: 串口通信控件简介 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。 由于MSComm控件不是标准控件,要使用它就必须将MSComm控件添加到控件工具箱中 添加控件的方法:选择“工程”|“部件”命令,在出现的“部件”对话. 阅读全文
posted @ 2011-05-17 16:55 让linux飞一会儿 阅读(10656) 评论(6) 推荐(3)