ASIC实验总结报告Word文档下载推荐.docx
《ASIC实验总结报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ASIC实验总结报告Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
这样,传输码中的连零数就被控制在3个以
内。
在取代节中,V叫做破坏点,用它在码流中破坏极性交替这一原则,以便接收端识别。
B码是为了平衡正负极性而加入的一个附加传号,它并不破坏极性交替的原则,因此又称它
为非破坏点。
HDB3码的取代原则为:
(1)出现四个连零用取代节取代;
(2)当相邻破坏点V中间有奇数个原始传号(不包括B码)时,用"
000V”取代;
(3)当相邻破坏点V中间有偶数个原始传号时,用"
B00V'
取代;
(4)用"
取代时,B码和V码与它们前面一个原始传号(或V码)极性相反;
(5)用"
000V'
取代时,V码与它前面的传号极性相同。
可以证明,按照上述原则编出的HDBn码,相邻破坏点V的极性也是相反的,因此,破坏点的引入不会导致码流的正负不平衡。
由于HDB3码中的V码破坏了极性交替原则,因此,在收端很容易找到它。
在译码时,将破坏点V检出,包括它前面的三位码一律还原为“0”码就完成了HDB3码的译码工作。
2、HDB3解码电路
HDB3译码电路完成编码的反变换,关键之处是检出破坏点,取消“取代节”,即将
“000V”或“B00V”还原成“0000”,其管腿框图如下:
图2HDB3译码电路管脚图
四、HDB3译码电路模块设计
根据编码规则,解码过程步骤为:
首先将同步时钟信号、正整流信号、负整流信号输入解码模块中,然后从正整流信号和负整流信号中可以检测出两路包含V码的信号,将两路V码合成一路信号,再对其进行解码,最后将双相码变换成单相码。
示意图如下图所示:
图7解码流程示意图
1、V码检测
V码检测同时进行正V码检测和负V码检测,这两个检测模块的设计思想类似。
当正整流信号上升沿到来时对输入的脉冲进行计数,当计数到1时,输出一个脉冲作为+V脉冲,同时计数器清零。
在计数期间,一旦检测到负整流信号脉冲,计数器立即清零,重新从零计数。
这是因为在两个正整流信号脉冲之间,如果存在负整流信号脉冲,说明第二个正整流信号脉冲不是+V码,只有在连续两个正整流信号脉冲之间没有负整流信号脉冲,才能说明这两个正整流信号脉冲在HDB3码中是同极性的,达到检测+V码的目的。
-V码检测与+V码的检测类似,所不同的是-V码的检测是在正整流信号脉冲的控制下对负整流信号脉冲进行计数、检测和判定。
图8是正V码检测的流程图:
图8正V码检测流程示意图
2、V码和B码解码过程
检测到V码后,根据HDB3编码规则,只需将V码及之前3位码全部置零就可同时完成扣除V码和B码的操作。
这里需要使用两组4位移位寄存器实现。
扣除V码和B码之后,还需要将双相码变换成单相码,即当输入是“00”时输出“0”,输入是“01”或“10”时输出“1”,这样就完成了HDB3的解码。
图9为双相码变单相码流程示意图:
图9双相码变单相码流程示意图
五、实验结果
交互仿真
综合后的门级电路
门级电路仿真
七、实验总结
通过本次试验,我对verilog有了更加深入的了解,对ASIC设计也有了直观的认识与体验。
在实验中,由于HDB3码编码、译码规则的特殊性,本次测试程序并没有采用给随机数进行测试的方式,而是通过给一串典型的固定激励,观察输出结果是否与预期一致。
再通过反复多次测量以确保电路功能的准确性,本实验报告中只给出了一组典型测试数据的仿真波形与结果。
通过本次实验,我深刻体会到测试程序设计的重要性,它涉及到的问题可能比电路本身还要复杂,需要在以后编写程序时继续深入学习。
感谢老师助教们一学期以来的辛勤付出
八、实验代码
1、HDB3译码电路模块设计
modulejiema(hdb,hdb_,clk,reset,nrz);
inputhdb,hdb_,clk,reset;
//defineinputports
outputnrz;
//defineoutputports
regnrz;
reg[1:
0]shift_reg[3:
0];
//defineshiftregister
regcount;
//flagtodetectpositiveVcode
regcount_;
//flagtodetectnegtiveVcode
0]pole_change;
//polarconvertingstate
0]flag;
//recordinputsignal
always@(hdborhdb_)//detectpositiveVcodeandnegtiveVcode
begin
if(hdb)
begin
if(count)
flag=2'
b00;
count=0;
//clearcountflag
end
else
b10;
count=1;
//setcountflag
count_=0;
elseif(hdb_)
if(count_)
//clearcount_flag
b01;
count_=1;
//setcount_flag
b11;
always@(posedgeclkorposedgereset)
if(reset)
shift_reg[3]<
=0;
shift_reg[2]<
shift_reg[1]<
shift_reg[0]<
pole_change<
=shift_reg[3];
//shiftoutdatafromshiftregister
=shift_reg[2];
=shift_reg[1];
=shift_reg[0];
case(flag)
2'
b00:
begin
//clearBcodeandVcode
b01:
shift_reg[0]<
=2'
b10:
b11:
default:
endcase
end
always@(posedgeclkorposedgereset)//ouputsignalnrz
nrz<
elseif(pole_change==2'
b10||pole_change==2'
b01)
=1;
endmodule
2、HDB3译码模块测试程序
//Name:
WangYing/ZhengXueYing/YuHong
//Class:
2010211202
//Number:
10211059
//CreateDate:
23:
43:
1005/14/2012
//ModuleName:
HDB3_decoder
//Version:
ModelSimSE6.5c
`timescale100ns/10ns
modulejiema_test;
reghdb,hdb_,clk,reset;
//driveinputports
wirenrz;
//testoutputport
regflag;
//detectfirsthighlevel
integeri;
reg[35:
0]exp_nrz;
//outputexpect
reg[39:
0]judgement;
//judgetheaccuracybetweentheoutputandexpect
0]result;
//showthesimulationresult
Jiamau1(.hdb(hdb),.hdb_(hdb_),.clk(clk),.reset(reset),.nrz(nrz));
//instantiation
initial//initializevariablesandinputresetsignal
flag=0;
i=0;
exp_nrz=36'
b0000_0000_1101_1000_0100_0111_0001_1000_0111;
clk=0;
reset=0;
#1reset=1;
#5reset=0;
always#2.5clk=~clk;
//clocksignal
initial//inputtestsignal
hdb=0;
hdb_=0;
#10hdb=1;
hdb_=0;
#5hdb=0;
hdb_=1;
#5hdb=1;
#15hdb=1;
#15hdb=0;
#10hdb=0;
while
(1)
always@(posedgenrz)
if(!
flag)
flag<
result<
="
right"
;
always@(posedgeclk)//judgetheresultandshowtheinformation
if(flag)
if(i<
36)
if(nrz==exp_nrz[i])
judgement<
wrong"
if(i!
=0)
$display("
%s!
"
judgement);
$write("
nrz=%b;
expect:
nrz=%b;
nrz,exp_nrz[i]);
i<
=i+1;
Thesimulationresultis%s!
result);
$stop;
3、jiema.tcl约束文件内容
setLIBRARY/home2/student/lib/train/synopsys
settopjiema
set_attrlibrary$LIBRARY/typical.lib
read_hdl{jiema.v}
elaboratejiema
setcyc20.00
procall_inputs{}{find-port-inputs-no_clocks*}
procall_outputs{}{find-port-outputs*}
read_sdcjiama.sdc
synthesize-to_generic-no_incremental
synthesize-to_mapped-effmedium
write_hdljiama>
jiema.vg
write_sdf–designjiema>
jiema.sdf
write_sdcjiema>
jiema.gate.sdc
4、jiema.sdc文件内容:
setsdc_version1.4
set_units-capacitance1000.0fF
set_units-time1000.0ps
#Setthecurrentdesign
current_designcontrol
create_clock-name"
clk"
-add-period20.0-waveform{0.010.0}[get_portsclk]
set_input_delay–clock[get_clocksclk]–add_delay2.0[(hdb,hdb_,clk,reset,nrz]
set_output_delay–clock[get_clocksclk]–add_delay2.0[get_portsyout]