DDS信号发生器设计方案讲解Word格式.docx
- 文档编号:21237954
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:14
- 大小:373.01KB
DDS信号发生器设计方案讲解Word格式.docx
《DDS信号发生器设计方案讲解Word格式.docx》由会员分享,可在线阅读,更多相关《DDS信号发生器设计方案讲解Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
常见的计算机显示器有CRT(CathodeRayTube,阴极射线管)显示器和液晶显示器,本次设计针对CRT显示。
CRT中的阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生RGB三基色,合成一个彩色像素。
用逐行扫描的方式显示图像。
扫描从屏幕左上方开始,从左到右,从上到下,进行扫描。
每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;
扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。
图2扫描轨迹
其中蓝色–行正程,红色–行逆程;
正程显示(实线),逆程消隐(虚线)
1.VGA显示标准
VGA标准共有5个信号:
R(红色)、G(绿色)、B(蓝色)、HS(行同步)、VS(场同步)
支持640*480分辨率
图3VGA显示标准(行)
表1行扫描时序
行扫描时序(单位:
像素,即输出一个像素的时间)
Ta
Tb
Tc
Td
Te
Tf
Tg
时间
96
40
8
640
800
图4VGA显示标准(场)
表2场扫描时序
场扫描时序(单位:
行,即输出一行的时间)
2
25
480
525
VGA显示标准
时钟频率:
25.175MHz(输出像素的频率)
行频:
31469Hz
场频:
59.94Hz(每秒图像刷新频率,约60Hz)
2.时序处理
分别将场同步信号和行同步信号做时间近似处理
表3对行同步做近似处理
us)
3.8
1.6
0.3
25.4
前项之和
5.7us
26us
表4对场同步做近似处理
行)
作近似处理
忽略
482
这样,便可通过计数分频得到行同步信号和场同步信号。
下面以开发板的50Mhz时钟信号为例,得到32Khz的行同步信号和64hz的长同步信号
图5时序处理图
三)波形显示原理
要显示波形,需要将波形数据存入存储器(简称wave_RAM)。
wave_RAM中可以写入读出波形数据。
下面将以幅值为256的正弦波为例,阐明波形显示原理。
图6波形显示结构图
每个时钟沿到来,从存储器中读出一个数,通过判断x_cnt与addr的关系以及y_cnt与data的关系是否满足条件,控制屏幕上以x_cnt和y_cnt为坐标的像素点的颜色值。
其中,x_cnt与addr的关系以及y_cnt与data的关系如下图7所示。
图7波形显示像素位置与存储器地址之间关系
x_cnt与存储器地址对应;
若高度等于数据值,则该处颜色为红色。
关键算法如下:
若在(m,n)处开始显示波形
当x_cnt=m时,addr=0
若y_cnt=n-data,则rgb=010;
当x_cnt=m+1时,addr=1
……
当x_cnt=m+i时,addr=i
四)字符显示原理
要显示字母、数字、符号、汉字等,需要自建字库(以后简称Char_ROM)。
Char_ROM中存放字模数据。
字模尺寸自行设定,例如英文字母、数字等可设置为16行*8列像素,汉字可设置为16行*16列像素。
图8字符库端口图
1.字模库设计
以16行*8列的字模1的设计及存储为例。
图9字模库设计举例
字库容量:
地址线与所有字符所占列数(决定于字符数量)有关,数据线与一个字符所占行数有关。
该例中数据线位数为16bit,地址为2bit。
2.字符显示思路:
1)确定屏幕显示起始位置,屏幕显示起始位置由行列计数值决定。
2)求Char_ROM地址
Char_ROM起始地址由所要显示的字符决定(可将地址用宏定义的方法与字符关联)。
3)读取该地址对应的数据
4)确定数据位和像素位置的关系
数据位和像素位置的关系由行计数值、起始行数、字符所占行数决定。
5)显示颜色,RGB赋值
若数据为1,则对应位置上的RGB赋值为字符色,否则RGB值赋值为背景色。
至此,DDS及VGA显示的原理介绍结束,下面开始进行系统设计及程序编写仿真。
三、系统设计实现
由于实验时间有限,在实际设计时并未对所生成波形做移相与改变幅值的处理,整体设计思路如下图10所示。
图10系统设计思路
一)参数设计
本次实验中所生成的正弦波共采样256个点,存储器采用8位地址线,数据为16bit。
设N为18位,M为地址线位数为8位,频率字
=(000000010000000000)2,则当输入时钟为vga_clk=25Mhz时,由DDS原理部分公式可推知当输出DDS输出频率fOUT=100Khz。
由于显示屏幕大小为640*480,需要显示两个周期的波形共256*2=512个点,设置屏幕显示横向范围为50到561,纵向范围为100到300;
字符显示范围为横向50到305,纵向310到325。
二)各模块实现程序及仿真结果
1.DDS模块
程序如下:
moduleDDS1(CLK,CTR,Q);
inputCLK;
inputCTR;
//input[17:
0]BK0;
//频率设置字
//input[3:
0]A;
//幅值设置字
//input[2:
0]BKI0;
//初相位设置字
output[7:
0]Q;
//DDS数字量输出
wire[17:
0]BK1;
0]BK2;
0]BK3;
wire[7:
0]addr;
0]Q0;
0]Q1;
reg[7:
0]Q2;
assignBK0=17'
b000000010000000000;
assignBKI2=BK2[17:
10];
//取N位的高M位
DFF32DDF1(CLK,BK0,BK1);
ADDADD1(CLK,BK1,BK2,BK3);
DFF32DDF2(CLK,BK3,BK2);
//相位累加器
ROM10ROM1(BKI2,CLK,Q0);
//正弦ROM查找表
ROM10triROM2(BKI2,CLK,Q1);
always@(posedgeCLK)
if(CTR)Q2<
=Q0;
elseQ2<
=Q1;
assignQ=Q2;
endmodule
仿真结果如下图11所示
图11DDS模块仿真结果
2.vga显示模块
moduleddsvga(vga_clk,clk,hs,vs,blank_n,red,green,blue,sync_n);
inputclk;
outpuths,vs;
outputblank_n;
output[9:
0]red;
0]green;
0]blue;
outputsync_n;
outputvga_clk;
wirer,g,b;
wire[3:
1]grb;
wirevs,hs,sync_n_r;
wirefclk,cclk;
wireclk_div;
wire[7:
0]data;
wire[4:
0]addrchar;
wire[15:
0]datachar;
integeri;
reg[7:
0]addr1;
reg[4:
0]addr1char;
reghs1,vs1;
wire[8:
0]y_cnt;
reg[9:
0]xcc;
reg[5:
0]fs;
0]cc;
//hangtongbu
reg[8:
0]ll;
//changtongbu
reg[3:
1]grbp;
div_2div_2(clk,clk_div);
ROMsinROM(addr,clk,data);
//testchartestchar(addrchar,clk,datachar);
assignvga_clk=clk_div;
assigngrb[2]=(grbp[2])&
hs1&
vs1;
assigngrb[3]=(grbp[3])&
assigngrb[1]=(grbp[1])&
always@(posedgeclk)begin
if(fs==53)fs<
=0;
elsefs<
=(fs+1'
b1);
end
assignfclk=fs[5];
always@(posedgefclk)begin
if(cc==29)cc<
=5'
b00000;
elsecc<
=cc+1'
b1;
assigncclk=cc[4];
always@(posedgecclk)begin
if(ll==481)ll<
=9'
b0;
elsell<
=ll+1'
assigny_cnt=ll;
//生成行同步,场同步信号
always@(ccorll)begin
if(cc>
23)hs1<
=1'
elsehs1<
if(ll>
479)vs1<
elsevs1<
always@(posedgevga_clk)
if(blank_n)
begin
if(xcc==639)xcc<
elsexcc<
=xcc+1'
elsexcc<
always@(xcc,y_cnt,data)
begin
if(xcc>
=10'
d200&
&
xcc<
d455)
addr1<
=xcc-8'
d200;
if(y_cnt==9'
d300-data)grbp<
=3'
b001;
elsegrbp<
b000;
else
begin
grbp<
end
/****************/
always@(posedgeclk_div)
if(y_cnt>
=9'
d100&
y_cnt<
d115)
if(xcc==10'
d500)
addr1char<
=0;
//求地址
elseif(xcc>
=10'
d501&
xcc<
d516)
addr1char<
=addr1char+1'
end
0]dis_bit=10'
d115-y_cnt;
always@(posedgeclk_div)//数据位
grbp<
if(y_cnt>
y_cnt<
d115&
xcc>
if(datachar[dis_bit])
=3'
b010;
//RGB赋值
elsegrbp<
assignaddr=addr1;
assignaddrchar=addr1char;
assignhs=hs1;
assignvs=vs1;
assignr=grb[2];
assigng=grb[3];
assignb=grb[1];
assignblank_n=hs&
vs;
assignsync_n_r=1'
assignsync_n=sync_n_r;
assignred={10{r&
blank_n}};
assigngreen={10{g&
assignblue={10{b&
endmodule
最终显示结果如图12所示
图12最终结果显示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDS 信号发生器 设计方案 讲解
![提示](https://static.bdocx.com/images/bang_tan.gif)