版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FPGA的波形发生器FPGA的波形发生器/NUMPAGES59FPGA的波形发生器FPGA的波形发生器西北工业大学课程设计报告题目:波形发生器学院:电子信息学院班级:08041202学生(学号):2012301995学生(姓名):张雨日期:2014年1月20日摘要本设计基于FPGA开发板,利用硬件描述语言Verilog进行编程,通过DDS数字频率合成实现频率可调的正弦波、三角波、方波简易发生器。本文所设计的内容就是基于Altera公司的现场可编程门阵列(FPGA)实现数字信号发生器的设计,FPGA具有密度高,功耗低,体积小,可靠性高等特点,设计时可以不必过多考虑具体硬件连接;本设计中应用Verilog硬件描述语言进行描述,使该数字信号发生器可以产生正弦波、方波、三角波、锯齿波四个独立的波形,并能对所产生的四种波形的频率和进行调节。设计输出频率范围是1kz———10kHz步进是1KHZ,测量的结果在数码管上显示。关键词:FPGAVerilogPS2协议IIC协议PCF8591目录目录课程设计目的•••••••••••••••••••••••4设计任务与要求•••••••••••••••••••••4方案设计与论证•••••••••••••••••••••5单元电路设计与参数计算•••••••••••••11遇到问题的解决方法•••••••••••••••••13结论与心得•••••••••••••••••••••••••14参考文献•••••••••••••••••••••••••••15附录•••••••••••••••••••••••••••••••16题目:波形发生器课程设计目的1)巩固和加深所学电子技术课程的基本知识,提高综合运用所学知识的能力;2)培养学生根据课题需要选用参考书、查阅手册、图表和文献资料的能力,提高学生独立解决工程实际问题的能力;3)通过设计方案的分析比较、设计计算、元件选绎及电路安装调试等环节.初步掌握单实用电路的工程设计方法;4)提高学生的动手能力.掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试和对整机指标的测试方法;5)了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务书的要求编写设计说明书,能正确反映设计和实验成果,能正确绘制电路图等.设计任务与要求任务:利用VerilogHDL或VHDL硬件描述语言及FPGA开发板实现波形发生器和学号循环显示。设计要求:1、显示学号采用数码管显示;循环显示2个人的学号后四位;2、根据按键输出波形1)根据按键输入不同,分别输出正弦波、方波、三角波(频率=1KHz);2)根据按键改变频率(频率变化范围:1KHz-10KHz,每次频率变化1KHz);3)输出频率在数码管上显示方案设计与论证显示学号:直接给数码管赋值显示学号,设计时钟频率,控制跳变。1)频率部分:开发板的时钟脉冲是50MHz,作为显示脉冲频率太高,因而首先进行分频,分到肉眼可辨别的频率;2)显示计数部分:要求循环显示两人的学号后四位,当CP脉冲的上升沿到来的时候对其进行计数,直到cnt<32'd49_999_9993)数码管显示部分:对于2)中的CP脉冲上升沿的计数,前两个数码管显示输出19部分,后两面数码管当cnt<=32'd24_999_999的时候显示79,否则显示88,即能实现学号后四位的循环显示根据按键输出波形总体方案实现及系统框图该设计以FPGA开发平台为核心,将各波形的幅值/相位量化数据存储在ROM内,按照设定频率,以相应频率控制字k为步进,对相位进行累加,以累加相位值作为地址码读取存放在存储器内的波形数据,经D/A转换和幅度控制、滤波即可得到所需波形。波形发生器采取全数字化结构,用硬件描述语言Verilog设计实现其频率可调可显示。经开发平台的D/A转化和外加滤波整形处理波形数据,理论上能够实现任意频率的各种波形。DDS电路一般由参考时钟、相位累加器、波形存储器、D/A转换器(DAC)和低通滤波器(LPF)组成[7]。其结构框图如图2.5所示。图2.5DDS基本结构框图其中,为参考时钟频率,为频率控制字,为相位累加器位数,为波形存储器位数,为波形存储器的数据位字长和D/A转换器位数。(二)直接数字频率合成技术原理DDS系统中的参考时钟通常由一个高稳定度的晶体振荡器来产生,用来作为整个系统各个组成部分的同步时钟。频率控制字(FrequencyControlWord,FCW)实际上是二进制编码的相位增量值,它作为相位累加器的输入累加值。相位累加器由加法器和寄存器级联构成,它将寄存器的输出反馈到加法器的输入端实现累加的功能。在每一个时钟脉冲,相位累加器把频率字累加一次,累加器的输出相应增加一个步长的相位增量,由此可以看出,相位累加器的输出数据实质上是以为步长的线性递增序列(在相位累加器产生溢出以前),它反映了合成信号的相位信息。相位累加器的输出与波形存储器的地址线相连,相当于对波形存储器进行查表,这样就可以把存储在波形存储器中的信号抽样值(二进制编码值)查出。在系统时钟脉冲的作用下,相位累加器不停的累加,即不停的查表。波形存储器的输出数据送到D/A转换器,D/A转换器将数字量形式的波形幅度值转换成所要求合成频率的模拟量形式信号,从而将波形重新合成出来。若波形存储器中存放的是正弦波幅度量化数据,那么D/A转换器的输出是近似正弦波的阶梯波,还需要后级的低通平滑滤波器进一步抑制不必要的杂波就可以得到频谱比较纯净的正弦波信号。图2.6所示为DDS各个部分的输出信号。由于受到字长的限制,相位累加器累加到一定值后,就会产生一次累加溢出,这样波形存储器的地址就会循环一次,输出波形循环一周。相位累加器的溢出频率即为合成信号的频率。可见,频率控制字K越大,相位累加器产生溢出的速度越快,输出频率也就越高。故改变频率字(即相位增量),就可以改变相位累加器的溢出时间,在参考频率不变的条件下就可以改变输出信号的频率。图2.6DDS各部分输出波形DDS系统的优点有很多,它的很多特性是其他频率合成技术所没有的,其中最主要的特性有以下三点:(1)DDS技术可以用于产生任意波形基于前面对DDS系统的基本结构分析,很容易理解,只要改变存储在波形存储器中的波形数据,就可以改变输出波形。所以对于任何周期性波形,只要满足采样定理,都可以利用DDS技术来实现。(2)DDS系统具有很高的频率分辨率DDS系统输出频率的分辨率和频点数随相位累加器的位数成指数增长,由可知,在系统时钟频率不变的情况下,只要增大相位累加器的位数,就可以得到几乎是任意小的频率分辨率,可以满足精细频率控制的要求。DDS如此精细的频率分辨率,使其输出频率已十分逼近连续变化。(3)输出频率切换速度快且相位保持连续与锁相频率合成相比,由于DDS系统是一个开环系统,所以当一个新的频率控制字送到时,它会迅速合成这个新的频率,实际的频率切换时间可以达ns级。同时,频率切换时,DDS系统的输出波形的相位是连续的。DDS系统的频率字改变时,输出波形的变化过程可以用图2.12描述。图2.12频率控制字改变时累加器的输出值和输出波形的变化(仿真)在波形输出到点时,频率字发生了改变(变小),相位累加器的累加值即相位步进变小,其输出值斜率也变小,系统的输出波形的频率也在同时刻变小。DDS系统在频率字发生改变后的一个时钟周期,其输出频率就可以就转换到了新的频率上,也即在频率字的值改变以后,累加器在经过一个时钟周期后就按照新的频率字进行累加,开始合成新的频率。所以我们可以认为DDS的频率切换是在一个系统时钟周期内完成的,系统时钟频率越高,切换速度越快。另外,从前面对DDS技术原理的分析可知,要改变输出频率,实际上改变的是频率字,也就是相位增量。当频率字的值从改变为之后,相位累加器是在已有的累积相位上,再对进行累加,相位函数曲线是连续的。从图2.12也可以看出,只是在频率字改变的瞬间相位函数曲线的斜率发生了突变,相位值并没有发生跳跃,因此DDS能够在频率切换的过程中保持相位连续,输出波形能够平滑地从一个频率过渡到另外一个频率。(三)1总体设计模块1)按键控制模块键盘的处理器如果发现有键被按下或释放将发送扫描码的信息包到计算机。扫描码有两种不同的类型:通码和断码。当一个键被按下就发送通码,当一个键被释放就发送断码。每个按键被分配了唯一的通码和断码。2)波形控制模块(1)波形产生模块分别产生三角波,方波,正弦波三种波形,对三种波形在一个周期内采取其中的255个样点数据,clock为系统时钟信号(2)波形显示模块IIC总线并行转串行模块,利用其D/A转换模块从而实现其产生的波形在示波器上显示IIC通信中只涉及两条信号线,时钟线 SCL和数据线SDA。时钟线的下降沿锁存数据。当SCL高电平时,把SDA从高电平拉倒低电平,则表示开始通信;反之,把SDA从低电平拉倒高电平,则表示通信结束。D/A转换模块:利用8591器件实现数据D/A转换,最终将波形显示在波形显示器上。其中要利用SCL,SDA,VCC,GND,D/A等主要接口,用FPGA实现IIC总线,实现和PCF8591连接,并用8591进行D/A转换,实现波行输出。3)数码管显示部分::开发板的时钟脉冲是50MHz,要求实现的是1KHz到10KHz以步长为1KHz进行变化,所以对50MHz进行10种分频;要求对应显示十个频率,因而利用按键按下的次数进行模10计数,每计一次数,将对应频率进行输出显示。四、单元电路设计与参数计算1、显示学号时钟脉冲为50MHZ,将其分为占空比为50%的频率时钟信号,得到的频率为1HZ的时钟信号作为学号显示的频率根据按键输出波形DDS输出频率关系式计算:输出频率1kHz,M=50000输出频率2kHz,M=25000 输出频率3kHz,M=16666输出频率4kHz,M=12500 输出频率5kHz,M=10000 输出频率6kHz,M=08333输出频率7kHz,M=07142输出频率8kHz,M=06250输出频率9kHz,M=05555输出频率10kHz,M=05000依次为三角波,方波,正玄波的频率产生数码管显示通过频率控制字的大小换算频率,控制数码管的显示五、遇到问题的解决方法1、这个问题着实困扰了我们很长时间,之前学习过C++,微机汇编等语言,对一些简单的问题进行编程。突然接触一门新的语言,对我们来说比较陌生甚至让人很不适应,尤为特殊的是VerilogHDL主要为了实现硬件功能,和上述其他语言还是有很大的不同。加之本学期完成数电实验主要用VHDL语言,因此十分陌生。在花了数天时间看其语法后,发现还是与通用语言有许多共通之处的,只不过是表示方法不同而已,只要注意语言之间语法别串用,设计思路还是大体相同,我们需要写好正确并编译无误的程序并分配合适的管脚,实现功能还是相对简单的。总的来说,在初步入门之后,我们才发现VerilogHDL的易读性和通用性有多强。2、正弦波的波形刚开始不是很正确,原因是采样时取值只用了正半周的数据。解决方法:重新计算采样值,改变程序里面的采样值3、我们在开始设计前浏览了一定的相关书籍,学习硬件描述预言,查阅开发板的数据手册,详细了解开发板的模块、功能。4、对于题目的要求难以构思,无从下手。开始设计时,对于整个程序的框架还很模糊,于是上网查阅了不少关于基于FPGA的波形发生器的实例,发现应用DDS技术可以很好的解决这一问题。查阅资料了解DDS的其基本原理后基于本次设计的要求提出了我们自己的方案。5、但是对于波形发生器所涉及的PS2协议和显示部分所用到的IIC协议,我们无从下手,后来通过网上下载程序不断的修改程序,终于调试出了三种波形,但还是未能实现通过按键不同来产生的不同通码控制信号,从而来改变三种波形的输出,最后只能设计出通过接不同的针脚从而来实现三种波形的转换!6、正弦波的波形显示出现了错误,其中有一部分的波形不稳定,出现了误差,甚至有时候调不出来波形,与杜邦线,示波器以及针脚,芯片都有一定的关系7、频率计算出错,调试程序后发现步进值达不到要求,检查后发现频率控制字值设置错误。六、结论与心得对于我们来说,课程设计是一次学习的机会。因为总会遇到一些自己从来没有遇到的问题,锻炼了自己解决问题的能力,也学会了与人合作。这次课设让我加深了对verilog语言的理解,因为掌握不熟练,常会犯一些低级错误,在做的过程中,理解,并运用到实际中,真的提升了自己的能力。当调试出错时,我们认真分析问题,并请教老师和同学,找到问题,并解决。做设计是个综合的工程,需要从整体把握,将复杂逐渐变为简单,做到最后,我们发现一开始的困难都不算什么了,因为我们更深的理解了设计概念和方法。本设计实现了可以输出三种波形发生器,结果证明,频率可以改变,并且可以通过数码管显示,所以该设计正确有效。本系统仍然有着很多可改进的地方,比如可以拓展为输出幅值可调的波形,或者输出任意波形以更贴近实际情况;采样点数可以进一步提高,提高波形的准确度。在以后的学习中,我们会更加认真,用心。把知识灵活运用。真正做到设计。参考文献[1]张永瑞等著.电子测量技术基础.西安:西安电子科技大学出版社.2004.1-15[2]林占江,林放著.电子测量仪器原理与使用.北京:电子工业出版社.2006.1-21[3]张学峰,胡长江.功能各异的各种任意波形发生器.国外电子测量技术.2000,4.17-18[4]毛敏.基于DDS的高精度方波信号发生器的研究.西安电子科技大学工学硕士论文.2006.5-6[5]张有正等著.频率合成技术.北京:人民邮电出版社.1984.1-33[6]杜慧敏、赵全良著《基于Verilog的FPGA设计基础》西安电子科技大学出版社[7]王金明《Verilog
HDL程序设计教程》人民邮电出版社[8]PCF8591芯片手册【9】DEO芯片手册附录:(各模块程序代码)1、显示学号moduleabc_fp(clk,a1,a2,a3,a4);inputclk;output[6:0]a1;output[6:0]a2;output[6:0]a3;output[6:0]a4;reg[31:0]cnt;always@(posedgeclk)if(cnt<32'd49_999_999)cnt<=cnt+1'b1;elsecnt<=32'd0;assigna1=7'b1001111;assigna2=7'b0000100;assigna3=(cnt<=32'd24_999_999)?7'b0001111:7'b0000000;assigna4=(cnt<=32'd24_999_999)?7'b0000100:7'b0000000;Endmodule波形发生器moduleverilog_iicps2(clk,rst_n,ps2k_clk,ps2k_data,ps2_byte,ps2_byte1,ps2_state,led_out,led_out1,scl,sda,scl1,scl2,sda1,sda2,scpl,scpl_fb,scpl_sin,led_out2);inputclk;//时钟50MHzinputrst_n;//复位信号inputps2k_clk;//ps2接口时钟信号inputps2k_data;//ps2数据信号output[7:0]ps2_byte;//1byte数值,按键扫描output[7:0]ps2_byte1;outputps2_state;//键盘当前状态ps2_state=1表示当前有键被按下outputled_out;outputled_out1;outputled_out2;outputscl;outputsda;outputscl1;outputsda1;outputscl2;outputsda2;output[7:0]scpl;output[7:0]scpl_fb;output[7:0]scpl_sin;regps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2;//ps2k_clk状态寄存?reg[24:0]count2;reg[24:0]count1;reg[24:0]count3;reg[24:0]count_4;reg[24:0]count5;reg[24:0]count1_fb;reg[24:0]count1_sin;regdiv_clk;regled_out;regled_out1;regled_out2;regplxs_clk;regsin_clk;reg[7:0]numb;reg[7:0]numb_fb;reg[7:0]numb_sin;reg[7:0]data;reg[7:0]data_sin;reg[7:0]data_fb;reg[8:0]count_data;reg[8:0]count_datafb;reg[8:0]count_datasin;regscl;regscl1;regscl2;regsda;regsda1;regsda2;regflag;reg[7:0]scpl;reg[7:0]scpl_fb;reg[7:0]scpl_sin;reg[19:0]count_jc;reg[19:0]count_jcfb;reg[19:0]count_jcsin;reg[7:0]cnt;reg[7:0]cnt1;reg[7:0]cnt2;reg[19:0]count_pl;reg[19:0]fb_pl;reg[19:0]sin_pl;regg_clk;wireneg_ps2k_clk;//ps2k_clk下降沿标志位always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginps2k_clk_r0<=1'b0;ps2k_clk_r1<=1'b0;ps2k_clk_r2<=1'b0;endelsebeginps2k_clk_r0<=ps2k_clk;ps2k_clk_r1<=ps2k_clk_r0;ps2k_clk_r2<=ps2k_clk_r1;endendassignneg_ps2k_clk=~ps2k_clk_r1&ps2k_clk_r2;//检测下降沿1有效reg[7:0]ps2_byte_r;//pc接收ps2一个字节数据存储器reg[7:0]temp_data;//当前接收数据寄存器reg[3:0]num;//计数寄存器always@(posedgeclkornegedgerst_n)begin if(!rst_n)begin num<=4'd0; temp_data<=8'd0;endelseif(neg_ps2k_clk)begin//检测到下降沿case(num)4'd0:num<=num+1'b1;//起始位不采样4'd1:beginnum<=num+1'b1;temp_data[0]=ps2k_data;//bit0end4'd2:beginnum<=num+1'b1;temp_data[1]=ps2k_data;//bit1end4'd3:beginnum<=num+1'b1;temp_data[2]=ps2k_data;//end4'd4:beginnum<=num+1'b1;temp_data[3]=ps2k_data;end4'd5:beginnum<=num+1'b1;temp_data[4]=ps2k_data;end4'd6:beginnum<=num+1'b1;temp_data[5]=ps2k_data;end4'd7:beginnum<=num+1'b1;temp_data[6]=ps2k_data;//bit6end4'd8:beginnum<=num+1'b1;temp_data[7]=ps2k_data;//bit7end4'd9:beginnum<=num+1'b1;//奇偶校验不处理end4'd10:begin num<=4'd0;//结束位num清零 end default:;//应答位不处理 endcase endendregkey_f0;//松键标志位,置1表示接收到数据8'hf0,再接收到下一个数据后清零?regps2_state_r;//键盘当前状态,ps2_state_r=1表示有键被按下//regflag=0;always@(posedgeclkornegedgerst_n)begin//接收数据的相应处理,这里只对1byte的键值进行处理if(!rst_n)beginkey_f0<=1'b0;ps2_state_r<=1'b0;endelseif(num==4'd10)begin//刚传送完一个字节数据if(temp_data==8'hf0)key_f0<=1'b1;elsebeginif(!key_f0)begin//说明有键按下 ps2_state_r<=1'b1; ps2_byte_r<=temp_data;//锁存当前键值 //if(flag)transport<=temp_data; //flag<=flag+1'b1;endelsebegin ps2_state_r<=1'b0; key_f0<=1'b0;endendendendalways@(negedgeps2_state_r)beginif(ps2_state_r==0)transport<=ps2_byte_r;endreg[7:0]transport;reg[7:0]ps2_asci; //接收数据的相应ASCII码reg[7:0]ps2_asci1;regcount;always@(ps2_byte_r)begincount<=count+1;//if(count==1)begin case(ps2_byte_r) //键值转换为ASCII码,这里做的比较简单 8'h45:ps2_asci<=zero; 8'h16:ps2_asci<=one; 8'h1E:ps2_asci<=two; 8'h26:ps2_asci<=three; 8'h25:ps2_asci<=four; 8'h2E:ps2_asci<=five; 8'h36:ps2_asci<=six; 8'h3D:ps2_asci<=seven; 8'h3E:ps2_asci<=eight; 8'h46:ps2_asci<=nine; default:ps2_asci<=nothing; endcase //end //elseps2_asci<=nothing; endalways@(posedgeps2_state_r)beginif(ps2_state_r==1)begin case(transport) //键值转换为ASCII码,这里做的比较简单 8'h45:ps2_asci1<=zero; 8'h16:ps2_asci1<=one; 8'h1E:ps2_asci1<=two; 8'h26:ps2_asci1<=three; 8'h25:ps2_asci1<=four; 8'h2E:ps2_asci1<=five; 8'h36:ps2_asci1<=six; 8'h3D:ps2_asci1<=seven; 8'h3E:ps2_asci1<=eight; 8'h46:ps2_asci1<=nine; default:ps2_asci1<=nothing; endcase end elseps2_asci1<=nothing; endassignps2_byte=ps2_asci; assignps2_byte1=ps2_asci1;assignps2_state=ps2_state_r;parameterzero=8'b1100_0000,one=8'b1111_1001,two=8'b1010_0100,three=8'b1011_0000,four=8'b1001_1001,five=8'b1001_0010,six=8'b1000_0010,seven=8'b1111_1000,eight=8'b1000_0000,nine=8'b1001_0000,nothing=8'b1111_1111;always@(posedgeclk)beginif(count2==500)begindiv_clk<=~div_clk;count2<=0;endelsecount2<=count2+1;led_out<=~div_clk;endalways@(posedgeps2_state)begincnt<=cnt+1;case(cnt)8'd01:count_pl<=20'd50000;8'd02:count_pl<=20'd25000;8'd03:count_pl<=20'd16666;8'd04:count_pl<=20'd12500;8'd05:count_pl<=20'd10000;8'd06:count_pl<=20'd08333;8'd07:count_pl<=20'd07142;8'd08:count_pl<=20'd06250;8'd09:count_pl<=20'd05555;8'd10:count_pl<=20'd05000;8'd11:beginfb_pl<=20'd50000;count_pl<=1'b0;end8'd12:beginfb_pl<=20'd25000;count_pl<=1'b0;end8'd13:beginfb_pl<=20'd16666;count_pl<=1'b0;end8'd14:beginfb_pl<=20'd12500;count_pl<=1'b0;end8'd15:beginfb_pl<=20'd10000;count_pl<=1'b0;end8'd16:beginfb_pl<=20'd08333;count_pl<=1'b0;end8'd17:beginfb_pl<=20'd07142;count_pl<=1'b0;end8'd18:beginfb_pl<=20'd06250;count_pl<=1'b0;end8'd19:beginfb_pl<=20'd05555;count_pl<=1'b0;end8'd20:beginfb_pl<=20'd05000;count_pl<=1'b0;end8'd21:beginsin_pl<=20'd50000;count_pl<=1'b0;end8'd22:beginsin_pl<=20'd25000;count_pl<=1'b0;end8'd23:beginsin_pl<=20'd16666;count_pl<=1'b0;end8'd24:beginsin_pl<=20'd12500;count_pl<=1'b0;end8'd25:beginsin_pl<=20'd10000;count_pl<=1'b0;end8'd26:beginsin_pl<=20'd08333;count_pl<=1'b0;end8'd27:beginsin_pl<=20'd07142;count_pl<=1'b0;end8'd28:beginsin_pl<=20'd06250;count_pl<=1'b0;end8'd29:beginsin_pl<=20'd05555;count_pl<=1'b0;end8'd30:beginsin_pl<=20'd05000;count_pl<=1'b0;endendcaseendalways@(posedgeclk)//sanjiaobobeginif(count1==count_pl)begincount_jc<=count1;count1<=0;count_data<=count_data+1;if(count_data==255)begin data<=data+1; end else begin data<=data-1; endendelsecount1<=count1+1;endalways@(posedgeclk)//fangbobeginif(count1_fb==fb_pl)begincount_jcfb<=count1_fb;count1_fb<=0;count_datafb<=count_datafb+1;if(count_datafb<=255)begin data_fb<=8'd255; end else begin data_fb<=8'd0; endendelsecount1_fb<=count1_fb+1;endalways@(posedgeclk)beginif(count3==25000000)beginplxs_clk<=~plxs_clk;count3<=0;endelsecount3<=count3+1;led_out1<=~plxs_clk;endalways@(posedgeclk)//sinfenpinqibeginif(count5==sin_pl)begincount_jcsin<=count5;sin_clk<=~sin_clk;count5<=0;endelsecount5<=count5+1;led_out2<=~sin_clk;endalways@(posedgesin_clk)begin//sincase(count_4) 8'd001:data_sin<=8'd128; 8'd002:data_sin<=8'd134; 8'd003:data_sin<=8'd140; 8'd004:data_sin<=8'd146; 8'd005:data_sin<=8'd152; 8'd006:data_sin<=8'd158; 8'd007:data_sin<= 8'd165; 8'd008:data_sin<= 8'd170; 8'd009:data_sin<= 8'd176; 8'd010:data_sin<= 8'd182; 8'd011:data_sin<= 8'd188; 8'd012:data_sin<= 8'd193; 8'd013:data_sin<= 8'd198; 8'd014:data_sin<= 8'd203; 8'd015:data_sin<= 8'd208; 8'd016:data_sin<= 8'd213; 8'd017:data_sin<= 8'd218; 8'd018:data_sin<= 8'd222; 8'd019:data_sin<= 8'd226; 8'd020:data_sin<= 8'd230; 8'd021:data_sin<= 8'd234; 8'd022:data_sin<= 8'd237; 8'd023:data_sin<= 8'd240; 8'd024:data_sin<= 8'd243; 8'd025:data_sin<= 8'd245; 8'd026:data_sin<= 8'd248; 8'd027:data_sin<= 8'd250; 8'd028:data_sin<= 8'd251; 8'd029:data_sin<= 8'd253; 8'd030:data_sin<= 8'd254; 8'd031:data_sin<= 8'd254; 8'd032:data_sin<= 8'd255; 8'd033:data_sin<= 8'd255; 8'd034:data_sin<= 8'd255; 8'd035:data_sin<= 8'd254; 8'd036:data_sin<= 8'd254; 8'd037:data_sin<= 8'd253; 8'd038:data_sin<= 8'd251; 8'd039:data_sin<= 8'd250; 8'd040:data_sin<= 8'd248; 8'd041:data_sin<= 8'd245; 8'd042:data_sin<= 8'd243; 8'd043:data_sin<= 8'd240; 8'd044:data_sin<= 8'd237; 8'd045:data_sin<= 8'd234; 8'd046:data_sin<= 8'd230; 8'd047:data_sin<= 8'd226; 8'd048:data_sin<= 8'd222; 8'd049:data_sin<= 8'd218; 8'd050:data_sin<= 8'd213; 8'd051:data_sin<= 8'd208; 8'd052:data_sin<= 8'd203; 8'd053:data_sin<= 8'd198; 8'd054:data_sin<= 8'd193; 8'd055:data_sin<= 8'd188; 8'd056:data_sin<= 8'd182; 8'd057:data_sin<= 8'd176; 8'd058:data_sin<= 8'd170; 8'd059:data_sin<= 8'd165; 8'd060:data_sin<= 8'd158; 8'd061:data_sin<= 8'd152; 8'd062:data_sin<= 8'd146; 8'd063:data_sin<= 8'd140; 8'd064:data_sin<= 8'd134; 8'd065:data_sin<= 8'd128; 8'd066:data_sin<= 8'd121; 8'd067:data_sin<= 8'd115; 8'd068:data_sin<= 8'd109; 8'd069:data_sin<= 8'd103; 8'd070:data_sin<= 8'd97; 8'd071:data_sin<= 8'd90; 8'd072:data_sin<= 8'd85; 8'd073:data_sin<= 8'd79; 8'd074:data_sin<= 8'd73; 8'd075:data_sin<= 8'd67; 8'd076:data_sin<= 8'd62; 8'd077:data_sin<= 8'd57; 8'd078:data_sin<= 8'd52; 8'd079:data_sin<= 8'd47; 8'd080:data_sin<= 8'd42; 8'd081:data_sin<= 8'd37; 8'd082:data_sin<= 8'd33; 8'd083:data_sin<= 8'd29; 8'd084:data_sin<= 8'd25; 8'd085:data_sin<= 8'd21; 8'd086:data_sin<= 8'd18; 8'd087:data_sin<= 8'd15; 8'd088:data_sin<= 8'd12; 8'd089:data_sin<= 8'd10; 8'd090:data_sin<= 8'd7; 8'd091:data_sin<= 8'd5; 8'd092:data_sin<= 8'd4; 8'd093:data_sin<= 8'd2; 8'd094:data_sin<= 8'd1; 8'd095:data_sin<= 8'd1; 8'd096:data_sin<= 8'd0; 8'd097:data_sin<= 8'd0; 8'd098:data_sin<= 8'd0; 8'd099:data_sin<= 8'd1; 8'd100:data_sin<= 8'd1; 8'd101:data_sin<= 8'd2; 8'd102:data_sin<= 8'd4; 8'd103:data_sin<= 8'd5; 8'd104:data_sin<= 8'd7; 8'd105:data_sin<= 8'd10; 8'd106:data_sin<= 8'd12; 8'd107:data_sin<= 8'd15; 8'd108:data_sin<= 8'd18; 8'd109:data_sin<= 8'd21; 8'd110:data_sin<= 8'd25; 8'd111:data_sin<= 8'd29; 8'd112:data_sin<= 8'd33; 8'd113:data_sin<= 8'd37; 8'd114:data_sin<= 8'd42; 8'd115:data_sin<= 8'd47; 8'd116:data_sin<= 8'd52; 8'd117:data_sin<= 8'd57; 8'd118:data_sin<= 8'd62; 8'd119:data_sin<= 8'd67; 8'd120:data_sin<= 8'd73; 8'd121:data_sin<= 8'd79; 8'd122:data_sin<= 8'd85; 8'd123:data_sin<= 8'd90; 8'd124:data_sin<= 8'd97; 8'd125:data_sin<= 8'd103; 8'd126:data_sin<= 8'd109; 8'd127:data_sin<= 8'd115; 8'd128:begin data_sin<= 8'd121; count_4<=25'd0; end endcaseendalways@(posedgediv_clk)begin//iicforsjbnumb<=numb+8'b0000001;case(numb)8'h01:scl<=1;//s8'h02:sda<=0;8'h03:scl<=0;//address8'h04:sda<=1;8'h05:scl<=1;8'h06:scl<=0;8'h07:sda<=0;8'h08:scl<=1;8'h09:scl<=0;8'h0a:sda<=0;8'h0b:scl<=1;8'h0c:scl<=0;8'h0d:sda<=1;8'h0e:scl<=1;8'h0f:scl<=0;8'h10:sda<=0;8'h11:scl<=1;8'h12:scl<=0;8'h13:sda<=0;8'h14:scl<=1;8'h15:scl<=0;8'h16:scl<=1;8'h17:scl<=0;8'h18:scl<=1;8'h19:scl<=0;8'h1a:scl<=1;//ack8'h1b:scl<=0;8'h1c:sda<=1;//48'h1d:scl<=1;8'h1e:scl<=0;8'h1f:sda<=1;8'h20:scl<=1;8'h21:scl<=0;8'h22:sda<=0;8'h23:scl<=1;8'h24:scl<=0;8'h25:scl<=1;8'h26:scl<=0;8'h27:scl<=1;8'h28:scl<=0;8'h29:scl<=1;8'h2a:scl<=0;8'h2b:scl<=1;8'h2c:scl<=0;8'h2d:scl<=1;8'h2e:scl<=0;8'h2f:scl<=1;8'h30:scl<=0;//ack8'h31:sda<=data[7];8'h32:scl<=1;8'h33:scl<=0;8'h34:sda<=data[6];8'h35:scl<=1;8'h36:scl<=0;8'h37:sda<=data[5];8'h38:scl<=1;8'h39:scl<=0;8'h3a:sda<=data[4];8'h3b:scl<=1;8'h3c:scl<=0;8'h3d:sda<=data[3];8'h3e:scl<=1;8'h3f:scl<=0;8'h40:sda<=data[2];8'h41:scl<=1;8'h42:scl<=0;8'h43:sda<=data[1];8'h44:scl<=1;8'h45:scl<=0;8'h46:sda<=data[0];8'h47:scl<=1;8'h48:scl<=0;8'h49:sda<=0;//ack8'h4a:scl<=1;8'h4b:scl<=0;8'h4c:scl<=1;//stop8'h4d:sda<=1;endcaseendalways@(posedgeplxs_clk)begin//sjbxianshicase(count_jc)16'd50000:scpl<=8'b11111001;16'd25000:scpl<=8'b10100100;16'd16666:scpl<=8'b10110000;16'd12500:scpl<=8'b10011001;16'd10000:scpl<=8'b10010010;16'd08333:scpl<=8'b10000010;16'd07142:scpl<=8'b11111000;16'd06250:scpl<=8'b10000000;16'd05555:scpl<=8'b10010000;16'd05000:scpl<=8'b10001000;endcaseendalways@(posedgediv_clk)begin//iicforfbnumb_fb<=numb_fb+8'b0000001;case(numb_fb)8'h01:scl1<=1;//s8'h02:sda1<=0;8'h03:scl1<=0;//address8'h04:sda1<=1;8'h05:scl1<=1;8'h06:scl1<=0;8'h07:sda1<=0;8'h08:scl1<=1;8'h09:scl1<=0;8'h0a:sda1<=0;8'h0b:scl1<=1;8'h0c:scl1<=0;8'h0d:sda1<=1;8'h0e:scl1<=1;8'h0f:scl1<=0;8'h10:sda1<=0;8'h11:scl1<=1;8'h12:scl1<=0;8'h13:sda1<=0;8'h14:scl1<=1;8'h15:scl1<=0;8'h16:scl1<=1;8'h17:scl1<=0;8'h18:scl1<=1;8'h19:scl1<=0;8'h1a:scl1<=1;//ack8'h1b:scl1<=0;8'h1c:sda1<=1;//48'h1d:scl1<=1;8'h1e:scl1<=0;8'h1f:sda1<=1;8'h20:scl1<=1;8'h21:scl1<=0;8'h22:sda1<=0;8'h23:scl1<=1;8'h24:scl1<=0;8'h25:scl1<=1;8'h26:scl1<=0;8'h27:scl1<=1;8'h28:scl1<=0;8'h29:scl1<=1;8'h2a:scl1<=0;8'h2b:scl1<=1;8'h2c:scl1<=0;8'h2d:scl1<=1;8'h2e:scl1<=0;8'h2f:scl1<=1;8'h30:scl1<=0;//ack8'h31:sda1<=data_fb[7];8'h32:scl1<=1;8'h33:scl1<=0;8'h34:sda1<=data_fb[6];8'h35:scl1<=1;8'h36:scl1<=0;8'h37:sda1<=data_fb[5];8'h38:scl1<=1;8'h39:scl1<=0;8'h3a:sda1<=data_fb[4];8'h3b:scl1<=1;8'h3c:scl1<=0;8'h3d:sda1<=data_fb[3];8'h3e:scl1<=1;8'h3f:scl1<=0;8'h40:sda1<=data_fb[2];8'h41:scl1<=1;8'h42:scl1<=0;8'h43:sda1<=data_fb[1];8'h44:scl1<=1;8'h45:scl1<=0;8'h46:sda1<=data_fb[0];8'h47:scl1<=1;8'h48:scl1<=0;8'h49:sda1<=0;//ack8'h4a:scl1<=1;8'h4b:scl1<=0;8'h4c:scl1<=1;//stop8'h4d:sda1<=1;endcaseendalways@(posedgeplxs_clk)begin//fbxianshicase(count_jcfb)16'd50000:scpl_fb<=8'b11111001;16'd25000:scpl_fb<=8'b10100100;16'd16666:scpl_fb<=8'b10110000;16'd12500:scpl_fb<=8'b10011001;16'd10000:scpl_fb<=8'b10010010;16'd08333:scpl_fb<=8'b10000010;16'd07142:scpl_fb<=8'b11111000;16'd06250:scpl_fb<=8'b10000000;16'd05555:scpl_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11-T 1322.58-2025 安全生产等级评定技术规范 第58部分:社会旅馆
- 塔吊安装拆除与起重吊装培训
- 2025年吉安泰和县旅游投资发展有限公司招聘考试真题
- 2025年上海药品审评核查中心招聘辅助人员考试真题
- 2025年汉中市中医医院招聘考试真题
- 《数控加工编程与操作2》课件-0.3.1 Creo软件基本操作-启动软件、创建文件夹、设置工作目录、打开文件、鼠标使用、操作界面
- 2026湖北武汉市新洲区中医骨伤专科医院招聘护理人员7人考试参考题库及答案解析
- 2026内蒙古呼和浩特民族学院招聘(高等学校人员总量控制数)12人笔试参考题库及答案解析
- 2026年定西市气象系统事业单位人员招聘考试备考试题及答案详解
- 2026江苏连云港市赣榆区教育局所属学校招聘新教师29人考试备考题库及答案解析
- 2026长江财产保险股份有限公司武汉分公司综合部(副)经理招聘1人笔试备考题库及答案解析
- 2026年4月自考10993工程数学(线性代数、概率论与数理统计)试题
- GB/Z 177.2-2026人工智能终端智能化分级第2部分:总体要求
- 雨课堂学堂在线学堂云《自然辩证法概论( 武汉科技大)》单元测试考核答案
- 市场营销学(山东大学)智慧树知到期末考试答案章节答案2024年山东大学(威海)
- 挡墙人工挖孔桩安全专项施工方案专家论证
- 二年级上册心理健康课件-我的情绪我做主 全国通用(共19张PPT)
- 完整word版,“吕氏八字命理学”高级理论
- 看台膜结构施工
- 手绘表现——快题设计
- 自动开箱机结构设计(共40页)
评论
0/150
提交评论