当小于25的时候赋值为1,其余为0,使得将50MHZ处理为1MHZ。当取值大于或 等于50时复位为0。从而达到分频的目的。 程序2:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt is
port(clk:in std_logic; freq1:out std_logic; freq488:out std_logic; freq1953:out std_logic; freq7812:out std_logic; freq31250:out std_logic; freq125k:out std_logic; freq500k:out std_logic); end cnt;
architecture behv of cnt is
signal temp:std_logic_vector(19 downto 0); begin
process(clk) begin
if clk 'event and clk='1' then
if temp=\ temp<=\ else
temp<=temp+1; end if; end if; end process;
freq1<=temp(19); freq488<=temp(10); freq1953<=temp(8); freq7812<=temp(6); freq31250<=temp(4); freq125k<=temp(2); freq500k<=temp(0); end behv;
分析:程序2的设计思路同样是使用计数,但和程序1的计数不完全相同,数由16进 制表示,4为2进制组成1位16进制,所以从第0位开始可以计数2位,第一位 可以计数4位,第二位可以计数8位,依次可以得出计数量为2的n+1次方个数, 从而达到同时计数多个的目的从而产生多个时钟信号。 (1-4)模块四分析:
分析:显示模块由两部分组成,74138的表面作用是译码将输入的sel信号翻译出来并选中制定的数 码管。其实质作用是由输入的信号(0-7计数为8的计数信号输入),来控制数码管的片选。 而display的作用是来实现片选,将RS232输出的并行信号的两部分(每部分4位组成一个 16进制数)进行处理来实现段选。
分析:上图为display模块的细节图。rxd中的信号分为两组输入,分别进入muxer 的第0组和第1 组。其余的组全部拉低,达到出去最低两位显示,其余为显示全0的目的,cnt8为0-7的计 数,作用是控制muxer进入led程序的顺序,而led是为了实现段选,点亮数码管的特定位来 显示输入数值。 程序1.
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt8 is
port(clk:in std_logic;
q:out std_logic_vector(2 downto 0)); end cnt8;
architecture behv of cnt8 is
signal temp:std_logic_vector(2 downto 0); begin
process(clk) begin
if clk 'event and clk='1' then if temp=\ temp<=\ else
temp<=temp+1; end if; end if; end process; q<=temp; end behv;
分析:cnt8的作用为0-7的8位计数,为后面模块提供计数顺序。
程序2.
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity led is
port(din:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0)); end led;
architecture behv of led is begin
process(din) begin
case din is
when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others=>dout<=\ end case;
end process; end behv;
分析:程序led是完成段显,将输入的数值0-15翻译成对应的数码管编码。 (1-5)接收模块
分析:程序rsSedn作为接受模块,用于将232中发送的数据再次回写到到串口助手的接收端内!要是程序完全正常的话发送什么就会在接收窗口接收到什么。
3.3问题:
如何真正的实现发送和接受同步,并且发送的和接收的完全一样?发送和接收波特率怎么弄?
答:接收和显示的已经做出来了,但是发送的
4.总结:
参考文献
[1] 通信与电子系统实验指导书.武汉:华中科技大学武昌分校. [2] 潘松.EDA技术与VHDL.北京:清华大学出版社,2009.
[3] 朱运利.EDA技术应用(第二版).北京:电子工业出版社,2007. [4] 王行.EDA技术入门与提高.西安:西安电子科技大学出版社,2009.
[5] 李莉.电子设计自动化(EDA).北京:中国电力出版社,2009.
附录 程序清单:
程序1:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rs232 is
port(sysclk: in std_logic;