m序列Simulink仿真Verilog实现1.4阶m序列生成器Simulink模型如下:其中,可以在UnitDelay属性中设置初始值为1000,由于UnitDelay输出为double,所以要将其转为Boolean以便进行模二加运算,使用XOR实现。下面分别是最后一级和所有级的输出波形,可以看出,与上面的是一致的。Verilog实现`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Company://Engineer:////CreateDate:11:02:1705/01/2012//DesignName://ModuleName:PNcode//ProjectName://////////////////////////////////////////////////////////////////////////////////modulePNcode(clk,rst,PNstate,PNout);inputclk;inputrst;outputPNstate;outputPNout;//PNcoden=4,f(x)=1+x+x^4parameterorder=4;regPNout=0;reg[order-1:0]PNstate=0;always@(posedgeclk)if(rst==1)beginPNout=0;PNstate=4'b1000;//PNseed=b1000endelsebeginPNout=PNstate[0];PNstate={PNstate[3]+PNstate[0],PNstate[3:1]};endendmodule测试文件:`timescale1ns/1ps//////////////////////////////////////////////////////////////////////////////////Company://Engineer:////CreateDate:14:37:4305/01/2012//DesignName:PNcode//ModuleName:E:/me/CAST/Project/FPGAcomm/PNcode/PNcode_tb.v//ProjectName:PNcode//////////////////////////////////////////////////////////////////////////////////modulePNcode_tb;//Inputsregclk;regrst;//Outputswire[3:0]PNstate;wirePNout;//InstantiatetheUnitUnderTest(UUT)PNcodeuut(.clk(clk),.rst(rst),.PNstate(PNstate),.PNout(PNout));initialbegin//InitializeInputsclk=0;rst=1;//Wait100nsforglobalresettofinish#100;rst=0;//Addstimulushereendalwaysbeginforever#10clk=!clk;endendmoduleclk使用一个单独的always模块输出序列:00011110101100100012.8阶m序列生成器,初始全为110