本帖最后由 mytom520 于 2015-6-12 00:08 编辑
最近工作忙,好久没有更新帖子啦
1.1设计代码,在网络找到设计简明,占用资源较少
基本原理:
// 帧格式 |---------- frame ----------|
// rxdin -------___x=x=x=x=x=x=x=x=x=/------x===
// idle start N_bits_data [P]stop idle/start
// 起始位总是为低电平,数据位可变长度,校验位[P]可设置无(奇或偶)校验,结束位总是为高电平
// 位采样 |----------- 1 bit -------------|
// rxdin ==x===============================x==
// | | | | | | | | | | | | | | | | | |
// time 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 // sample O O O
1.2引入工程new projectàRTL Projectàadd filesà暂时不添加IPà暂时不添加约束
1.3单击RTL analysisàOpen Elaborated Design 可以看到工程分为五个模块
分别为:接收转发控制模块、波特率设置模块、发送模块、接受模块
1.4写好测试脚本,添加到工程:AddSimulation SourcesàRun Behavioral Simulation
调用Isim
进行功能行为仿真。发送A5
,一次先发送起始位、低位~
高位、无校验、停止位0_10100101_1,
即为A5
`timescale 1ns / 1ps
module TB_uart;
// Inputs
reg rst;
reg clk;
reg rxd;
// Outputs
wire txd;
// Instantiate the Unit Under Test (UUT)
uart uut (
.rst(rst),
.clk(clk),
.rxd(rxd),
.txd(txd)
);
initial begin
// Initialize Inputs
rst = 1;
clk = 0;
rxd = 1;
// Wait 100 ns for global reset to finish
#20; rst = 0;
#20; rst = 1;
// Add stimulus here
#8680; rxd = 0;
//////////////////////////////////////////////
#8680; rxd = 1;
#8680; rxd = 0;
#8680; rxd = 1;
#8680; rxd = 0;
#8680; rxd = 0;
#8680; rxd = 1;
#8680; rxd = 0;
#8680; rxd = 1;
//////////////////////////////////////////////
end
always #10 clk = !clk;
endmodule
1.5功能仿真完毕, 添加约束Add or Create Constraints,单击Synthesis,选中右侧的Synthesis Designàsourceà Constraints,在default layout下三角中选I/O planning,在I/O ports下(可以在主菜单window下面找到)添加引脚
利用上位机自发自收数据