verilog四位序列鉴别器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

哈尔滨工业大学HarbinHarbinHarbinHarbinHarbinHarbinHarbinHarbinInstituteInstituteInstituteInstituteInstituteInstituteInstituteInstituteofofofofofofofofTechnologyTechnologyTechnologyTechnologyTechnologyTechnologyTechnologyTechnologyVerilogVerilogVerilogVerilogVerilogVerilogVerilogVerilog硬件描述语言硬件描述语言大作业大作业设计题目:四位序列鉴别器院系:xxxx学院班级:xxxxxxxx设计者:xxxx学号:xxxxxxxxxxxx哈尔滨工业大学2013201320132013年6666月哈尔滨工业大学设计题目Tryrealizingthefunctionofashiftregisterasbelow:a)Atthepositiveedgeofclock,detecttheinputporttojudgeif“1001”sequenceappears;b)lowlevelasynchronicreset;c)4-cyclevalidindication.设计规范1使用四位串行移位寄存器实现,每个时钟信号上升沿左移一位,同时进行比较;2每四个周期出现一个标志信号,提示该四个周期是否检测到预设序列,若检测到,还应显示出检测到的次数;3可手动复位,信号来自外部输入异步复位信号,复位信号低电平有效;4整个待检序列检测完毕后,系统复位,延迟一段时间后重新检测;5需要记录整个待检序列中预设序列的数量;6可检测各种长度的待检序列。设计思路1111四位串行移位寄存器的设计使用非阻塞赋值,每个周期从最低位串行输入一位,输入后与预设序列进行比较,如果相等,则检测结果加一;若不相等,则等到下个上升沿时钟信号到来时继续移入下一位。因本例中预设的匹配序列为“1001”,若匹配相等一次之后,其在接下来的连续两个时钟周期内都将不会匹配,所以可以在匹配成功一次之后直接左移三位。但为了保证程序的可移植性,即针对不同的预设匹配序列(如“1111”等)均可正确执行,在程序编写时每个时钟周期仅移入一位。2222关于复位信号本次程序编写共用到两个复位信号,分别为:外部输入异步复位信号rst_n,下降沿有效;内部产生复位信号rst0,低电平有效。当rst_n出现下降沿时,无论程序运行到什么步骤,立刻将所有结果及中间变量清零或置位。内部复位信号rst0:当整个待检序列全部检测完毕后,将该信号拉低,并延迟一段时间,用以提醒用户本次序列已检测完毕,当该复位信号有效时,程序动作与rst_n出现下降沿相同。3333关于时钟信号外部提供主时钟,本例中激励块stimulate输入的时钟周期为10个时间单位(nS),在主模块chk_mold中对该主时钟进行四分频,用以为标志位提供时钟信号。哈尔滨工业大学4444关于四周期标志位两个记录结果的变量初值均为0,每检测匹配到一次序列,result立刻加一,每四个主时钟周期result_out更新为result的值,在更新之前,先进行与result的比较,若两者相等,则说明这四个周期内没有新检测匹配到预设序列;若两者不等则表示在这四个主时钟周期内新匹配到了预设序列“1001”,此时将result-result_out的值赋给标志位,赋值结束后,完成result_out的更新,以便四个主时钟周期后进行的下一次标志位确定功能。5555关于激励模块stimulatestimulatestimulatestimulate在该模块中读入宏定义的待检测序列ARRAY,并在调用主模块chk_mold时将其传入。主时钟信号clk及外部输入异步复位信号rst_n也在该模块中产生。本例中rst_n在仿真开始后的第500个时间单位开始出现下降沿,复位生效。6666关于主模块chk_moldchk_moldchk_moldchk_mold该模块输入信号依次为chk,array,rst_n。该模块完成的功能主要有:对主时钟clk的四分频;将待检测序列array移入串行移位寄存器并进行比较。输出各种检测结果及标志位。哈尔滨工业大学附:仿真程序及波形图/*veriloghomeworkversion_6byfujian2013-6-2919:47:34考虑到程序的可移植性,序列array长度及内容,匹配序列均采用宏定义时钟上升沿到来时进行寄存器移位并比较可将“1001001”判定为两个序列“1001”两个输出结果分别为:总输出结果及每四个周期输出标志信号*/`defineBIT_NUM24//宏定义待检测序列长度及初值,匹配序列初值`defineMOLD4'b1001`defineARRAY24'b1001_0011_0101_0011_1001_0010modulechk_mold(result,result_out,clk,array,rst_n);//序列检测模块outputresult,result_out;//输出两个结果分别为总结果及每四周期输出标志信号inputclk;input[`BIT_NUM-1:0]array;inputrst_n;//时钟clk,异步复位信号rst_n,待检序列array为输入regrst0=1'b1;integeri=`BIT_NUM,j=0;reg[1:0]k=2'b00;reg[3:0]result=4'b0000;reg[3:0]result_out=4'b0000;reg[3:0]q=4'b0000;regclk2=1'b0;//声明变量并初始化always@(posedgeclk)//对时钟进行四分频beginif(j==1)beginclk2=~clk2;j=0;endelsej=j+1;endalways@(posedgeclkornegedgerst_norrst0)if(rst_n&rst0)//rst_n为外部异步复位信号,下降沿复位有效begin//rst0为内部复位信号,低电平复位有效if(i0)beginq[3]=q[2];q[2]=q[1];q[1]=q[0];q[0]=array[i-1];//串行移入序列哈尔滨工业大学i=i-1;#5if(q[3:0]==`MOLD)result=result+1;//比较,若符合,结果加一else;endelse#100rst0=0;//当序列全部检测完毕后,延时100个单位后复位endelsebeginresult=0;result_out=0;//复位时进行的动作:结果清零,寄存器清零q[3:0]=4'b0000;k[1:0]=2'b0;//中间变量置位i=`BIT_NUM;#100rst0=1;//完成复位动作一段时间后,重新开始检测endalways@(posedge(clk2&rst_n))//每四个周期提交一次结果begin//该结果的值表示在此次提交之前的四个时钟if(result_out!=result)//周期clk内又新检测到多少个匹配序列,begin//result为到某一时刻为止的总结果,result_out为该时刻k=result-result_out;//所在的四个周期之前所有周期的总结果#5result_out=result;//若两者不等,则说明该四个周期内新检测到了1001#10k=0;//将结果维持一段时间后清零endelsek=0;endendmodulemodulestimulate();//激励模块reg[`BIT_NUM-1:0]array;regclk;regrst_n=1;initialarray=`ARRAY;initial//全局主时钟信号beginclk=1'b0;forever#5clk=~clk;哈尔滨工业大学endinitialbeginrst_n=1;#500rst_n=0;//外部异步复位信号使能,程序复位,数据清零end//例化调用序列检测模块chk_moldchk_moldchk1(,,clk,array,rst_n);Endmodule仿真波形图:(此时ARRAY=24'b1001_0011_0101_0011_1001_0010,共有5个“1001”)检测总结果串行移位寄存器每四个主时钟周期输出一次的标志信号及其清零,若维持0不变,则说明该四个周期内没有检测到1001哈尔滨工业大学待检测序列主时钟及四分频时钟检测完毕复位信号外部输入异步复位信号复位后除时钟以外的所有数据全部清零哈尔滨工业大学更换输入序列后的仿真波形图:(此时ARRAY=20'b1001_1011_0100_0010_1001,共有2个“1001”)

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功