📄 cicmodule.v
字号:
//internalclk >= 8*outputclkmodule cicmodule(inputclk, internalclk, outputclk, preset, datainput, dataoutput);parameter DataWidth=18;parameter OutputDiv=4; //OutputDiv=(order-1)*ln(outputclk/inputclk)/ln(2)input inputclk;input internalclk;input outputclk;input preset;input signed [(DataWidth-1):0] datainput;output signed [(DataWidth-1):0] dataoutput;//registersreg inputclkperiod;reg [2:0] statecount;reg signed [(DataWidth-1):0] inputreg; //--stage 1 (comb) signals,gain=2 -> + 1 bitreg signed [DataWidth:0] int0;//--stage 2 (comb) signals,gain=2 -> + 1 bitreg signed [DataWidth+1:0] int1;//--stage 3 (comb) signals,gain=2 -> + 1 bitreg signed [DataWidth+2:0] int2;reg signed [DataWidth+2:0] tempreg0;reg signed [DataWidth+2:0] tempreg1;//--stage 4 (integrator) signals,gain=2 -> + 1 bitreg signed [DataWidth+4:0] int3;//--stage 5 (integrator) signals,gain=0.5 -> - 1 bitreg signed [DataWidth+5:0] int4;//--stage 6 (integrator) signals,gain=4 -> + 2 bitreg signed [DataWidth+7:0] int5;reg signed [DataWidth+7:0] addInputA;reg signed [DataWidth+7:0] addInputB;reg signed [DataWidth+7:0] addInputBsig;reg addsubSelect;wire signed [DataWidth+7:0] addOutput;//Add/sunalways @ (addInputB or addsubSelect)begin if (addsubSelect)addInputBsig=-addInputB;elseaddInputBsig=addInputB;end//Addassign addOutput=addInputA+addInputBsig;//Output assignassign dataoutput=int5>>>OutputDiv;//Clk operationsalways @ (posedge inputclk or posedge outputclk or posedge preset)beginif (preset==1)inputclkperiod=1;else if(inputclk==1)inputclkperiod=1;else inputclkperiod=0;endalways @ (posedge inputclk or posedge preset)beginif (preset==1'b1)inputreg=0;elseinputreg =datainput;endalways @ (posedge internalclk or posedge inputclk or posedge preset)beginif(preset==1)statecount=0;else if (inputclk==1)statecount=0;elsestatecount=statecount+1;endalways @ (negedge internalclk or posedge preset)beginif(preset==1) begin tempreg0=0;tempreg1=0;int0=0;int1=0;int2=0;int3=0;int4=0;int5=0;endelse begincase (statecount)3'd0: beginif (inputclkperiod==1) begintempreg0=addOutput;int0=inputreg;endend3'd1: beginif (inputclkperiod==1) begintempreg1=addOutput;int1=inputreg;endend3'd2: beginif (inputclkperiod==1) beginint2=inputreg1;tempreg0=addOutput;endend3'd3: beginint3=addOutput;end3'd4: beignint4=addOutput;end3'd5: beginint5=addOutput;endendcaseendend//Combinatorial logicalways @ (statecount, inputreg,int0, int1, int2, int3, int4, int5, tempreg0,tempreg1, inputclkperiod)begincase (statecount)3'd0: beginaddInputA=inputreg;addInputB=int0;addsubSelect=1;end3'd1: beginaddInputA=tempreg0;addInputB=int1;addsubSelect=1;end3'd2: beginaddInputA=tempreg1;addInputB=int2;addsubSelect=1;end3'd3: beginaddInputA=int3;addInputB=(inputclkperiod == 1'b1) ? tempreg0 : 0;//UpsamplingaddsubSelect=0;end3'd4: beginaddInputA=int4;addInputB=int3;addsubSelect=0;end3'd5: beginaddInputA=int5;addInputB=int4;addsubSelect=0;endendcaseendendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -