JH5001二次开发实验指导书老师供综合设计参考.docx
《JH5001二次开发实验指导书老师供综合设计参考.docx》由会员分享,可在线阅读,更多相关《JH5001二次开发实验指导书老师供综合设计参考.docx(60页珍藏版)》请在冰豆网上搜索。
![JH5001二次开发实验指导书老师供综合设计参考.docx](https://file1.bdocx.com/fileroot1/2022-12/11/8d30d0c0-8875-49f5-a6ec-83b90b2b54e0/8d30d0c0-8875-49f5-a6ec-83b90b2b54e01.gif)
JH5001二次开发实验指导书老师供综合设计参考
JH5001二次开发参考程序
(以下所有程序均调试通过,可作为编程参考)
二OO三年一月
课程设计一、可变分频器的实验
TITLE"Counter";
SUBDESIGNCounter
(
%pcminput%
FSX_PCM,BCLKT,DT_PCM:
INPUT;
%msequence%
m_Sequence:
INPUT;
%SWinput%
SW[7..0]:
INPUT;
%controlmode%
Error_SEL[1..0]:
INPUT;
%MUXoutput%
MUX_DT:
OUTPUT;
MUX_CLK:
INPUT;
Error_ind:
OUTPUT;
%Testmsequence%
m_SEL[1..0]:
INPUT;
m_test:
OUTPUT;
Frame_Ind:
OUTPUT;
)
VARIABLE
Main_CLK:
LCELL;
Counter[7..0]:
DFF;
Mode[1..0]:
LCELL;
Counter_Out:
LCELL;
%studentspustdefinedvariablesathere%
Counter_Reset:
LCELL;
Counter_Out_Buff:
DFF;
BEGIN
Main_CLK=MUX_CLK;
Mode[]=M_SEL[];
%
INPUT:
Main_CLK:
input256KHzclock
Mode[1..0]:
Controlcountermode
Counter_Out:
Counteroutput
function:
ifMode[]=0:
Counter_Out=Main_CLK/213;
ifMode[]=1:
Counter_Out=Main_CLK/187;
ifMode[]=2:
Counter_Out=Main_CLK/156;
ifMode[]=3:
Counter_Out=Main_CLK/15;
%
--studentsputhisprograminhere
CASEMode[]IS
WHEN0=>
Counter_Reset=(Counter[]==212);
WHEN1=>
Counter_Reset=(Counter[]==186);
WHEN2=>
Counter_Reset=(Counter[]==155);
WHEN3=>
Counter_Reset=(Counter[]==14);
ENDCASE;
Counter[].clk=Main_CLK;
CASE(Counter_Reset)IS
WHEN0=>
Counter[].d=Counter[]+1;
WHEN1=>
Counter[].d=0;
ENDCASE;
Counter_Out_Buff.clk=!
Main_CLK;
CASEMode[]IS
WHEN0=>
Counter_Out_Buff.d=(Counter[]<106);
WHEN1=>
Counter_Out_Buff.d=(Counter[]<93);
WHEN2=>
Counter_Out_Buff.d=(Counter[]<78);
WHEN3=>
Counter_Out_Buff.d=(Counter[]<7);
ENDCASE;
Counter_Out=Counter_Out_Buff;
--fellowingprogramcan'tberewriteable
m_test=Counter_Out;
--notusedpin
MUX_DT=(FSX_PCM,BCLKT,DT_PCM,m_Sequence,SW[7..0],Error_SEL[1..0],MUX_CLK)==0;
(Error_ind,Frame_Ind)=0;
END;
课程设计二、m序列的产生实验
TITLE"mgeneratingsequence";
SUBDESIGNm
(
%pcminput%
FSX_PCM,BCLKT,DT_PCM:
INPUT;
%msequence%
m_Sequence:
INPUT;
%SWinput%
SW[7..0]:
INPUT;
%controlmode%
Error_SEL[1..0]:
INPUT;
%MUXoutput%
MUX_DT:
OUTPUT;
MUX_CLK:
INPUT;
Error_ind:
OUTPUT;
%Testmsequence%
m_SEL[1..0]:
INPUT;
m_test:
OUTPUT;
Frame_Ind:
OUTPUT;
)
VARIABLE
Main_CLK,Mode[1..0]:
LCELL;
Delay_m[6..0]:
DFF;
m_Out:
LCELL;
%studentspustdefinedvariablesathere%
All_Zero:
LCELL;
BEGIN
Main_CLK=MUX_CLK;
Mode[]=M_SEL[];
%
INPUT:
Main_CLK:
input256KHzclock
m_SEL[1..0]:
selectoutputmsequencetype
OUTPUT:
m_Out:
msequenceoutput
function:
generatingmsequence
m_SEL[]=0:
msequencetypeis(13)
m_SEL[]=1:
msequencetypeis(23)
m_SEL[]=2:
msequencetypeis(103)
m_SEL[]=3:
msequencetypeis(203)
%
--studentsputhisprograminhere
All_Zero=(Delay_m[]==0);
Delay_m[].clk=Main_CLK;
Delay_m[5..0].d=Delay_m[6..1];
CASEm_SEL[]IS
WHEN0=>
Delay_m6.d=Delay_m5$Delay_m4$All_Zero;
WHEN1=>
Delay_m6.d=Delay_m4$Delay_m3$All_Zero;
WHEN2=>
Delay_m6.d=Delay_m2$Delay_m1$All_Zero;
WHEN3=>
Delay_m6.d=Delay_m1$Delay_m0$All_Zero;
ENDCASE;
m_out=Delay_m6;
--fellowingprogramcan'tberewriteable
m_test=m_Out;
--notusedpin
MUX_DT=(FSX_PCM,BCLKT,DT_PCM,m_Sequence,SW[7..0],Error_SEL[1..0],MUX_CLK)==0;
(Error_ind,Frame_Ind)=0;
END;
课程设计三、噪声信号的产生
TITLE"noisegenerating";
SUBDESIGNNoise
(
%MUXinput%
MUX_DR,MUX_CLKR:
INPUT;
%PCMoutput%
DR_PCM:
OUTPUT;
FSR,BCLKR:
INPUT;
%moutput%
DR_m:
OUTPUT;
Frame_Ind:
OUTPUT;
%SWoutput%
SW_Out[7..0]:
OUTPUT;
)
VARIABLE
Delay_m[24..0]:
DFF;
PCM_Count[3..0],DR_PCM:
DFF;
BEGIN
%
input:
FSR:
PCMframeindication
BCLKR:
PCMdatainputclock
Output:
DR_PCM:
noisePCMcode
function:
thisprogramoutputnoisetoPCMdecoder
%
%msequencegenerating%
Delay_m[].clk=FSR;
Delay_m[23..0].d=Delay_m[24..1];--200000011
Delay_m24.d=Delay_m3$Delay_m0$(Delay_m[]==0);
%PCMoutput%
PCM_Count[].d=PCM_Count[]+1;
PCM_Count[].clk=BCLKR&FSR;
PCM_COunt[].clrn=FSR;
DR_PCM.clk=!
BCLKR;
CASEPCM_Count[]IS
WHEN0=>
DR_PCM.d=Delay_m0;
WHEN1=>
DR_PCM.d=Delay_m1;
WHEN2=>
DR_PCM.d=Delay_m2;
WHEN3=>
DR_PCM.d=Delay_m3;
WHEN4=>
DR_PCM.d=Delay_m4;
WHEN5=>
DR_PCM.d=Delay_m5;
WHEN6=>
DR_PCM.d=Delay_m6;
WHEN7=>
DR_PCM.d=Delay_m7;
ENDCASE;
%fellowingprogramcan'tbewriteable%
(DR_m,Frame_Ind)=((MUX_DR,MUX_CLKR)==0);
SW_Out[7..0]=Delay_m[7..0];
END;
课程设计四、复接实验
TITLE"FRAME";
%===========MUXplexdatadefining==============%
CONSTANTUW=B"11100100";
CONSTANTDataA=h"11";
CONSTANTDataB=h"22";
SUBDESIGNFrame
(
%pcminput%
FSX_PCM,BCLKT,DT_PCM:
INPUT;
%msequence%
m_Sequence:
INPUT;
%SWinput%
SW[7..0]:
INPUT;
%controlmode%
Error_SEL[1..0]:
INPUT;
%MUXoutput%
MUX_DT:
OUTPUT;
MUX_CLK:
INPUT;
Error_ind:
OUTPUT;
%Testmsequence%
m_SEL[1..0]:
INPUT;
m_test:
OUTPUT;
Frame_Ind:
OUTPUT;
)
VARIABLE
%studentsdefinevariableinhere%
Count[4..0],load,Send_buff[7..0]:
DFF;
MUX_DT:
DFF;
Send_bit:
LCELL;
BEGIN
%
INPUT:
MUX_CLK:
inputmultiplex256KHzclock
SW[7..0]:
multiplexdata1--->8bitswitchinformation
DataA:
multiplexdataAwhichisdefineasconstant
DataB:
multiplexdataBwhichisdefineasconstant
UW:
multiplexdataBwhichisdefineasconstant
output:
MUX_DT:
multiplexdataoutput
Frame_Int:
Frameindication
function:
ultiplex
DataA,DataB,SW,UWiscombinedasoneoutputdatastream
%
%==========studentsprogramputhere=============%
%32bytecounterforperframeis32bit%
Count[].clk=MUX_CLK;
Count[].d=Count[]+1;
Frame_Ind=Count4;
%loadgenerating%
load.d=(Count[]==31)#(Count[]==7)#(Count[]==15)#(Count[]==23);
load.clk=!
MUX_CLK;
%loaddata%
Send_buff[].clk=load;
CASE(Count[4..3])IS
WHEN0=>
Send_Buff[].d=UW;
WHEN1=>
Send_Buff[].d=DataA;
WHEN2=>
Send_Buff[].d=DataB;
WHEN3=>
Send_Buff[].d=SW[];
ENDCASE;
%paralleltoserial%
CASECount[2..0]IS
WHEN0=>
Send_bit=Send_buff7;
WHEN1=>
Send_bit=Send_buff6;
WHEN2=>
Send_bit=Send_buff5;
WHEN3=>
Send_bit=Send_buff4;
WHEN4=>
Send_bit=Send_buff3;
WHEN5=>
Send_bit=Send_buff2;
WHEN6=>
Send_bit=Send_buff1;
WHEN7=>
Send_bit=Send_buff0;
ENDCASE;
MUX_DT.d=Send_bit;
MUX_DT.clk=!
MUX_CLK;
%fellowingcan'tberewriteable%
Error_ind=(FSX_PCM,BCLKT,DT_PCM,m_Sequence,Error_SEL[1..0],m_SEL[])==0;
m_test=GND;
END;
课程设计五、帧同步实验
TITLE"deframe";
%=========UWdefine===========%
CONSTANTUW=B"11100100";
SUBDESIGNDeFrame
(
%MUXinput%
MUX_DR,MUX_CLKR:
INPUT;
%PCMoutput%
DR_PCM:
OUTPUT;
FSR,BCLKR:
INPUT;
%moutput%
DR_m:
OUTPUT;
Frame_Ind:
OUTPUT;
%SWoutput%
SW_Out[7..0]:
OUTPUT;
)
VARIABLE
%=============studentvariabledefine===============%
--serialtoparallel
stop_Buff[7..0]:
DFF;
--loadword
Line_Count[4..0]:
DFF;
Load_UW,UW_Buff[7..0]:
DFF;
Load_DataA,DataA_Buff[7..0]:
DFF;
load_DataB,DataB_Buff[7..0]:
DFF;
load_SW,SW_Buff[7..0]:
DFF;
%detectperiodcounter%
Period_Count[9..0]:
DFF;
%synchronous%
NO_SYN,Reset:
DFF;
Delay_NO_SYN[2..0]:
DFF;
Loss_one_Clock,Hold_Count:
LCELL;
Error_Word_Count[4..0]:
DFF;
Frame_ind:
DFF;
BEGIN
%
INPUT:
MUX_CLK:
inputmultiplex256KHzclock
MUX_DR:
multiplexdata
output:
DataA:
multiplexdataAwhichisdefineasconstant
DataB:
multiplexdataBwhichisdefineasconstant
SW:
multiplexSW
UW:
multiplexdataUW
Frame_Ind:
receiverframeindication
function:
demultiplex
DataA,DataB,SW,UWisextractedfrominputdatastream
%
%===============studentsprogramputhere==============%
%Clockformsequence%
Frame_ind.d=(Line_Count[]==0);
Frame_ind.clk=!
MUX_CLKR;
%serialtoparallel%
stop_Buff[7..1].d=stop_Buff[6..0];
stop_Buff0.d=MUX_DR;
stop_Buff[].clk=MUX_CLKR;
%loadword%
Line_Count[].d=Line_Count[]+1;
Line_Count[].clk=(MUX_CLKR&!
Loss_one_Clock);
--loadUWword
load_UW.d=(Line_Count[]==7);
load_UW.clk=!
MUX_CLKR;
UW_buff[].d=stop_Buff[];
UW_buff[].clk=load_UW;
--loadDataA
load_DataA.d=(Line_Count[]==15);
load_DataA.clk=!
MUX_CLKR;
DataA_buff[].d=stop_Buff[];
DataA_buff[].clk=load_DataA;
--loadDataB
load_DataB.d=(Line_Count[]==23);
load_DataB.clk=!
MUX_CLKR;
DataB_buff[].d=stop_Buff[];
DataB_buff[].clk=load_DataB;
--loadSW
load_SW.d=(Line_Count[]==31);
load_SW.clk=!
MUX_CLKR;
SW_buff[].d=stop_Buff[];
SW_buff[].clk=load_SW;
SW_Out[]=SW_buff[];
%periodcounter%
Period_Count[].d=Period_Count[]+1;--512frame
Period_Count[].clk=Load_UW;
%synchronous%
NO_SYN.d=(Error_Word_Count[]>30);
NO_SYN.clk=load_UW;
Reset.d=(period_Count[]==1);
Reset.clk=Load_UW;
%lossoneclockgenerating%
Delay_NO_SYN[2..0].clk=!
MUX_CLKR;
Delay_NO_SYN[2..1].d=Delay_NO_SYN[1..0];
Delay_NO_SYN0.d=NO_SYN;
Loss_one_Clock=(Delay_NO_SYN2$Delay_NO_SYN1)&Delay_NO_SYN1;
%erorwordcounter%
Error_Word_Count[].clrn=!
Reset;
Error_Word_Count[].clk=!
load_UW;
Hold_Count=(Error_Word_Count[]==31);
CASE(Hold_Count,(UW_Buff[]==UW))IS
WHEN0=>
Error_Word_Count[].d=Error_Word_Count[]+1;
WHENOTHERS=>
Error_Word_Count[].d=Error_Word_Count[];
ENDCASE;
%fellowingprogramcan'tbechange%
(DR_PCM,DR_m)=((FSR,BCLKR)==0)$(DataA_Buff[]==0)$(DataB_Buff[]==0);
END;
课程设计六、扰码实验
TITLE"Scrambler