verilog简单卷积器的设计Word格式.docx

上传人:b****8 文档编号:22416585 上传时间:2023-02-04 格式:DOCX 页数:14 大小:42.55KB
下载 相关 举报
verilog简单卷积器的设计Word格式.docx_第1页
第1页 / 共14页
verilog简单卷积器的设计Word格式.docx_第2页
第2页 / 共14页
verilog简单卷积器的设计Word格式.docx_第3页
第3页 / 共14页
verilog简单卷积器的设计Word格式.docx_第4页
第4页 / 共14页
verilog简单卷积器的设计Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

verilog简单卷积器的设计Word格式.docx

《verilog简单卷积器的设计Word格式.docx》由会员分享,可在线阅读,更多相关《verilog简单卷积器的设计Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

verilog简单卷积器的设计Word格式.docx

它对模拟输入信号实时采样,得到数字信号序列。

然后对数字信号进行卷积运算,再将卷积结果存入RAM中。

对模拟信号的采样由A/D转换器来完成,而卷积过程由卷积器来实现。

为了设计卷积器,首先要设计RAM和A/D转换器的VerilogHDL模型。

在电子工业发达的国家,可以通过商业渠道得到非常准确的外围器件的虚拟模型。

如果没有外围器件的虚拟模型,就需要仔细地阅读和分析RAM和A/D转换器的器件说明书,来自行编写。

因为RAM和A/D转换器不是我们设计的硬件对象,所以需要的只是它们的行为模型,精确的行为模型需要认真细致地编写,并不比可综合模块容易编写。

它们与实际器件的吻合程度直接影响设计的成功。

在这里我们把重点放在卷积器的设计上,直接给出RAM和A/D转换器的VerilogHDL模型和它们的器件参数(见附录),可以对照器件手册,认真阅读RAM和A/D转换器的VerilogHDL模型。

对RAM和A/D转换器的VerilogHDL模型的详细了解对卷积器的设计是十分必要的。

到目前为止,我们对设计模块要完成的功能比较明确了。

总结如下:

首先它要控制AD变换器进行AD变换,从AD变换器得到变换后的数字序列,然后对数字序列进行卷积,最后将结果存入RAM。

四、设计实现

卷积码编码器通常记作(n,k,N),对应于每段k个比特的输入序列,输出n个比特;

这n个输出比特不仅与当前的k个输入比特有关,而且还与以前的(N-1)k个输入比特有关。

(n,k,N)卷积码编码器包括:

一个由N段组成的输入移位寄存器,每段有k级,共Nk位;

一组n个模2加法器;

一个由n级组成的输出移位寄存器。

整个编码过程可以看成是输入序列与由移位寄存器和模2加法器连接方式所决定的另一个序列的卷积。

卷积码的解码方法主要有两种:

代数译码和概率译码。

代数译码是根据卷积码的本身编码结构进行译码,译码时不考虑信道的统计特性。

概率译码在计算时要考虑信道的统计特性。

大数逻辑解码器是代数解码最主要的解码方法,它既可用于纠正随机错误,又可用于纠正突发错误。

选择8位输入总线,输出到RAM的数据总线也选择8位,卷积值为16位,分高、低字节分别写到俩个RAM中,地址总线为11位。

为了理解卷积器设计中的状态机,必须对A/D转换器和RAM的行为模块有深入的理解。

卷积码的编码器是由一个有k个输入端、n个输出端、m节移位寄存器所构成的有限状态的有记忆系统,通常称它为时序网络。

描述这类时序网络的方法很多,大致可分为两大类型:

解析表示法与图形表示法。

解析法又可分为离散卷积法、生成矩阵法、码多项式法等;

描述卷积码编译码的过程,可以用不同的描述方法,如矩阵法、码树法、状态图法和篱状图法等。

采用何种方法描述卷积码的编码器,与其译码方法有很大关系。

编码器为串入串出结构,这里一共定义四个端口信号,它们分别

data_in:

INSTD_LOGIC;

--信息数据输入

clk_in:

--时钟输入

start:

--编码使能

data_out:

OUTSTD_LOGIC;

--编码数据输出

定义内部状态信号state,表示mj、mj-1、mj-2:

SIGNALstate:

STD_LOGIC_VECTOR(2downto0);

定义内部信号dtat_internal,用以暂存x1,j、x2,j:

SIGNALdata_internal:

TD_LOGIC_VECTOR(1downto0);

于是,由⑴、⑵式可知,data_internal与state的关系为:

data_internal

(1)=state(0)⊕⊕state

(1)state

(2)

data_internal(0)=state(0)⊕state

(2)

当编码使能start为0时不进行编码,并将状态state清零;

start为1时进行编码,此时每2个时钟周期输入一个新的信息比特,同时状态信号改变,输出2位已编码比特,即每个时钟周期输出1位已编码比特。

通过前面的分析我们已经知道,用高层次的设计方法来设计复杂的时序逻辑,重点是把时序逻辑抽象为有限状态机,并用可综合风格的VerilogHDL把这样的状态机描述出来。

下面我们将通过注释来介绍整个程序的设计过程。

我们选择8位输入总线,输出到RAM的数据总线也选择8位,卷积值的高、低字节被分别写到两个RAM中。

地址总线为11位。

卷积器的程序代码如下:

`timescale100ps/100ps

modulecon1(address,indata,outdata,wr,nconvst,nbusy,

enout1,enout2,CLK,reset,start);

inputCLK,//采用10MHZ的时钟

reset,//复位信号

start,//因为RAM的空间是有限的,当RAM存满后采样和卷积都会停止。

//此时给一个start的高电平脉冲将会开始下一次的卷积。

nbusy;

//从A/D转换器来的信号表示转换器的忙或闲

outputwr,//RAM写控制信号

enout1,enout2,//enout1是存储卷积低字节结果RAM的片选信号

//enout2是存储卷积高字节结果RAM的片选信号

nconvst,//给A/D转换器的控制信号,命令转换器开始工作,低电平有效

address;

//地址输出

input[7:

0]indata;

//从A/D转换器来的数据总线

output[7:

0]outdata;

//写到RAM去的数据总线

wirenbusy;

regwr;

regnconvst,

enout1,

enout2;

reg[7:

reg[10:

0]address;

reg[8:

0]state;

reg[15:

0]result;

reg[23:

0]line;

reg[11:

0]counter;

reghigh;

reg[4:

0]j;

regEOC;

parameterh1=1,h2=2,h3=3;

//假设的系统系数

parameterIDLE=9'

b000000001,START=9'

b000000010,NCONVST=9'

b000000100,

READ=9'

b000001000,CALCU=9'

b000010000,WRREADY=9'

b000100000,

WR=9'

b001000000,WREND=9'

b010000000,WAITFOR=9'

b100000000;

parameterFMAX=20;

//因为A/D转换的时间是随机的,为保证按一定的频率采样,A/D

//转换控制信号应以一定频率给出。

这里采样频率通过FMAX控制

//为500KHZ。

always@(posedgeCLK)

if(!

reset)

begin

state<

=IDLE;

nconvst<

=1'

b1;

enout1<

=1;

enout2<

counter<

=12'

b0;

high<

=0;

wr<

line<

=24'

address<

=11'

end

else

case(state)

IDLE:

if(start==1)

//counter是一个计数器,记录已

//用的RAM空间

=START;

else

//START状态控制A/D开始转换

START:

if(EOC)

=NCONVST;

//NCONVST状态是A/D转换保持阶段

NCONVST:

=READ;

end

//READ状态读取A/D转换结果,计算卷积结果

READ:

={line[15:

0],indata};

=CALCU;

CALCU:

result<

=line[7:

0]*h1+line[15:

8]*h2+line[23:

16]*h3;

=WRREADY;

//将卷积结果写入RAM时,先写入低字节,再写入高字节

//WRREADY状态是写RAM准备状态,建立地址和数据信号

WRREADY:

begin

=counter;

high)outdata<

=result[7:

0];

elseoutdata<

=result[15:

8];

=WR;

//WR状态产生片选和写脉冲

WR:

high)enout1<

elseenout2<

=WREND;

//WREND状态结束一次写操作,若还未写入高字节则转到WRREADY状

//态开始高字节写入

WREND:

high)

elsestate<

=WAITFOR;

//WAITFOR状态控制采样频率并判断RAM是否已被写满

WAITFOR:

if(j==FMAX-1)

=counter+1;

counter[11])state<

$display($time,"

Theramisused

up."

);

$stop;

default:

state<

endcase

//assignrd=1;

//RAM的读信号始终保持为高

//j记录时钟,与FMAX共同控制采样频率

//由于直接用CLK的上升沿对nbusy判断以

//决定某些操作是否运行时,会因为两个信号

//的跳变沿相隔太近而令状态机不能正常工作。

因此

//利用CLK的下降沿建立EOC信号与nbusy同步,相位

//相差180度,然后用CLK的上升沿判断操作是否进行。

always@(negedgeCLK)

EOC<

=nbusy;

reset||state==START)

j<

=j+1;

endmodule

程序仿真

程序写完后首先要做前仿真,我们可用仿真器(如ModelSimSE/EEPLUS5.4)来做。

为检查我们写的程序,需要编写测试程序,测试程序应尽可能检测出各种极限情况。

这里给出一个测试程序供参考。

//---------------------------testcon1.v-------------------

moduletestcon1;

wirewr,

enin,

wire[10:

regrd,

CLK,

reset,

start;

wirenconvst;

wire[7:

integeri;

parameterHALF_PERIOD=1000;

//产生10KHZ的时钟

initial

rd=1;

i=0;

CLK=1;

forever#HALF_PERIODCLK=~CLK;

//产生置位信号

reset=1;

#(HALF_PERIOD*2+50)reset=0;

#(HALF_PERIOD*3)reset=1;

//产生开始卷积控制信号

start=0;

#(HALF_PERIOD*7+20)start=1;

#(HALF_PERIOD*2)start=0;

#(HALF_PERIOD*1000)start=1;

assignenin=1;

con1con(.address(address),.indata(indata),.outdata(outdata),.wr(wr),

.nconvst(nconvst),.nbusy(nbusy),.enout1(enout1),

.enout2(enout2),.CLK(CLK),.reset(reset),.start(start));

sramramlow(.Address(address),.Data(outdata),.SRW(wr),.SRG(rd),.SRE(enout1));

adcadc(.nconvst(nconvst),.nbusy(nbusy),.data(indata));

因测试程序已经包括了各模块,只需编译测试程序并运行它。

通过仿真器中的菜单(如ModelSim仿真器中功能列表中view的下拉菜单选择structure,signal和wave),可以根据需要看到各种信号的波形,由此检测程序。

仿真波形如下:

五、设计总结

科学技术的发展使人类跨入了高度发展的信息化时代。

在政治、军事、经济等各个领域,信息的重要性不言而喻,有关卷积码的研究将越来越受到重视。

在编写程序的过程中,我深入学习了VHDL语言的仿真及应用环境,掌握了操作的基本过程与步骤,并能用VHDL语言进行编程及仿真,结合VHDL语言,充分了解到卷积码编译码器的原理和应用。

通过这次设计,使我对Verilog数字系统设计这门课程有了更深入的理解。

Verilog数字系统是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强实践。

一个人的力量是有限的,要想把设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。

程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。

再总体解决大的问题。

这样做起来不仅有条理也使问题得到了轻松的解决。

在这个过程中,我曾经失落过,也曾热情高涨过。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

虽然这只是一次的课程论文的编写,并没有验证方案是否可行,可是平心而论,也耗费了我不少的心血,这就让我不得不佩服开发技术的前辈,才意识到老一辈对我们社会的付出,为了人们的生活更加美好,他们付出多少心血啊!

对我而言,知识上的收获重要,精神上的丰收更加可喜。

让我知道了学无止境的道理。

我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。

挫折是一份财富,经历是一份拥有。

这次论文的写作过程必将成为我人生旅途上一个非常美好的回忆!

通过这次的设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。

以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!

我在更加牢固、灵活地掌握了所学的专业知识的同时,大量学习了VHDL编程的相关知识,为日后深入研究数字系统设计技术打下了基础。

六、参考文献

[1]夏宇闻,Verilog数字系统设计教程,北京航天航空大学出版社,2008.6

[2]钱莹晶,张仁民,基于VerilogHDL语言描述的卷积码编码器的设计[J].《科技信息》2009第五期

[3]王新梅,肖国镇,纠错码——原理与方法(修订版)[M].西安电子科技大学出版社,2001.

[4]王金龙,沈良,任国春,无线通信系统的DSP实现[M].人民邮电出版社,2002.

[5]张建斌,基于VHDL语言的卷积码编解码器的设计,现代电子技术《2005年第三期》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1