波形发生器课设报告

西北工业大学课程设计报告 题

日 目: 波形发生器 院 自动化学院 业 自动化 级 09031201 期 2015 年 1 月 15 日

摘要

波形发生器课设报告

波形发生器课设报告

2

1 题目

本次实验主要是以FPGA作为基础,制作一个简易波形发生器,不仅可以显示学号,同时可以通过按键输入产生波形, 并且可以根据需要按键修改波形以及频率。

2 要求

2.1显示学号

(1)采用数码管显示。

(2)循环显示两个人的学号后四位。

2.2按键输入产生波形

(1)根据标准键盘输入不同,分别输出正弦波、方波、三角波(频率=1KHz)。

(2)根据标准键盘改变频率(频率变化范围:1KHz-10KHz,每次频率变化1KHz)。

(3)输出频率在数码管上显示(用模块PCF8591进行D/A转化)。 3

3 设计平台与基础

3.1 设计平台与仿真工具

Quartus II是一种强有力的提供了EDA工具,是美国altera公司推出的,它完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、Verilog HDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;Logic Lock增量设计方法,可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用Signal Tap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方SOPC软件使用的VHDL网表文件和Verilog网表文件。测试采用了Quartus II的内嵌式逻辑分析仪

内嵌式逻辑分析仪三项主要优点:

1. 它们的使用不增加引脚。可通过FPGA 上已有的专门JTAG引脚访问,即使没有其它可用引脚,这种调试方法也能得到内部可视能力。

2. 简单的探测。探测包括把结点路由到内部逻辑分析仪的输入,不需要担心为得到有效信息,应如何连接到电路板上,也不存在信号完整性问题。

3. 内核是便宜的。FPGA厂商把他们的业务模型建立于用芯片所获取价值的基础上,所以所用的调试IP 通常能以低于$1,000美元的价格获得。

3.2芯片方案

3.2.1 FPGA器件的选择

由于Altera大学计划较为普及,设计并平台搭建方便,故采用Altera FPGA。 Altera 的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Cyclone,Cyclone II;还有一种侧重于高性能应用,容量大,性能满足各类高端应用,如Startix,Stratix II等,用户可以根据自己实际应用要求进行选择。在性能可以满足的情况下,优先选择低成本器件。 Cyclone(飓风):Altera中等规模FPGA,20xx年推出,0.13um工艺,1.5v内核供电,与Stratix结构类似,是一种低成本FPGA系列,是目前主流产品,其配置芯片也改用全新的产品。

Cyclone II: 20xx年开始推出,90nm工艺,1.2v内核供电,属于低成本FPGA,性能和Cyclone相当,提供了硬件乘法器单元。

Cyclone III:Cyclone III FPGA提供丰富的逻辑存储器和DSP功能功耗更低。 Cyclone 即可以满足本次课题的设计需求,所以本课题选用Cyclone III。 4

3.2.2 D/A芯片选型

PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I?C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

功能:

【1】PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。

【2】PCF8591的最大转化速率由I2C总线的最大速率决定。

特性:

【1】单独供电

【2】PCF8591的操作电压范围2.5V-6V

【3】低待机电流

【4】通过I2C总线串行输入/输出

【5】PCF8591通过3个硬件地址引脚寻址

【6】PCF8591的采样率由I2C总线速率决定

【7】4个模拟输入可编程为单端型或差分输入

【8】自动增量频道选择

【9】PCF8591的模拟电压范围从VSS到VDD

【10】PCF8591内置跟踪保持电路

【11】8-bit逐次逼近A/D转换器

【12】通过1路模拟输出实现DAC增益

5

4 方案设计

4.1 系统介绍

利用FPGA技术的强大功能,实现A/D转换,信号采集并显示采集信号的幅度、频率。并利用D/A转换产生幅度、频率可调的方波、正弦波、三角波。

4.2系统设计方案

4.2.1工作原理

系统框图

波形发生器课设报告

:

信号产生部分:

信号发生器采用D/A设计方案。

首先在FPGA中设计预先定制好的波形发生ROM表,然后键盘控制FPGA读取ROM表中写好的数据,送至D/A转换芯片后输出波形。

同时,由键盘输入控制,转换读取数据的ROM表格,来转换输出波形的种类;改变FPGA读取ROM表的读数间隔来改变输出信号的频率。

信号测量部分:

将被测信号经过放大器放大到可以被比较器识别的幅度值,经过比较器过零比较,产生同频率的方波信号,可以被FPGA直接识别,进行计数,经过FPGA内部数据处理,计算出被测信号的频率值,再由液晶显示。 6

4.3单元电路设计

4.3.1 输入设计

输入设计采用PS2键盘输入,即通过按键选择输出波形是正弦波、三角波还是方波,同时也通过键盘输入来改变波形的频率。

4.3.2 波形发生模块

由于波形发生控制器和波形数据ROM都是利用硬件描述语言编程实现的,所以统称为波形发生模块。波形发生控制器的作用是利用FPGA选择产生正弦波或者三角波,然后再发出地址信号,取ROM中存好的正弦波或三角波的采样数据。

波形发生模块包括波形切换和频率设置两个进程。切换进程的作用是完成通过按键来选择输出三角波或者三角波。频率设置进程主要是对输出的频率进行设置,只要合适的改变采样点的时间间隔就可完成频率设置。ROM数据存储模块主要是用来存储正弦波或者三角波的数据。当接收来自FPGA的地址信号后,将从数据线输出相应的波形数据,这样便得到数字化的波形。

4.3.3 D/A转换

D/A选用PCF8591作为主要波形发生芯片。引脚图如图1所示,结构图如图2示。

波形发生器课设报告

各引脚说明如下:

7

5.电路图

D/A与FPGA扩展接口相连接,搭成硬件连接系统,在此基础之上,设计软

波形发生器课设报告

8

波形发生器课设报告

件代码,用FPGA控制D/A的工作,和两者之间互相配合。如图所示。

波形发生器课设报告

系统原理图

6.测试方法

(1)用示波器观察产生波形;

(2)在液晶屏上读取信号频率值;

9

7.部分代码和软件程序

FPGA控制AD控制状态机

P1: process(present_state,next_state,AD_INT) begin

case present_state is

when AD_IDLE =>

AD_CS<='0';

AD_WR<='1';

AD_RD<='0';

next_state <= AD_STATE_1; when AD_STATE_1 => AD_WR <= '0'; AD_CS <= '0'; AD_RD <= '0';

next_state <= AD_STATE_2; when AD_STATE_2 => AD_WR <= '1'; AD_CS <= '0'; AD_RD <= '0';

if AD_INT='1' THEN next_state <= AD_WAIT; ELSE

next_state <= AD_STATE_1; END IF;

when AD_WAIT => AD_CS <= '0';

AD_WR <= '0';

AD_RD <= '0';

next_state <= AD_READ; when AD_READ => AD_CS <= '0';

AD_WR <= '1';

AD_RD <= '0';

next_state <= AD_STOP; when AD_STOP =>

next_state <= AD_IDLE; end case;

end process P1;

FPGA控制D/A控制状态机 10

p2:process(clk1,da_state)

begin

if rising_edge(clk1)then

case da_state is

when aidle=>

da_cs<='1';

da_wr<='1';

da_state<=astart;

when astart=>

da_cs<='0';

da_wr<='1';

da_state<=awrite;

when awrite=>

da_cs<='0';

da_wr<='0';

da_state<=ahold;

when ahold=>

da_out<=dadatain;

da_state<=astop;

when astop=>

da_state<=aidle;

when others=>null;

end case;

end if;

end process p2;

FPGA控制频率采集程序

p3:process(clkin,temp1,temp2,temp3,temp4,temp5,temp6)

begin

if clr='0' then

temp1<="0000";temp2<="0000";temp3<="0000";temp4<="0000";temp5<="0000";temp6<="0000";temp7<="0000";temp8<="0000";

elsif rising_edge(clkin) then

if sysclk='1' then

if temp1="1001" then temp1<="0000";

if temp2="1001" then temp2<="0000";

if temp3="1001" then temp3<="0000";

if temp4="1001" then temp4<="0000";

if temp5="1001" then temp5<="0000";

11

if temp6="1001" then temp6<="0000";

if temp7="1001" then temp7<="0000";

if temp8="1001" then temp8<="0000";

else temp8<=temp8+1;end if;

else temp7<=temp7+1;end if;

else temp6<=temp6+1;end if;

else temp5<=temp5+1;end if;

else temp4<=temp4+1;end if;

else temp3<=temp3+1;end if;

else temp2<=temp2+1;end if;

else temp1<=temp1+1;end if;

else

if temp1/="0000" or temp2/="0000" or temp3/="0000" or temp4/="0000" or temp5/="0000"

or temp6/="0000" or temp7/="0000" or temp8/="0000" then

dat1<=temp1;dat2<=temp2;dat3<=temp3;dat4<=temp4;

dat5<=temp5;dat6<=temp6;dat7<=temp7;dat8<=temp8;

temp1<="0000";temp2<="0000";temp3<="0000";temp4<="0000";temp5<="0000";temp6<="0000";

temp7<="0000";temp8<="0000";

end if;

end if;

end if;

end process p3;

建立ROM表:

always @(posedge sin_clk) begin //sin

case(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 ;

12

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 ;

13

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 ;

14

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

endcase

end

always @ (posedge div_clk) begin //iic for sjb numb<=numb+8'b0000001;

case(numb)

8'h01:scl<=1; //s

8'h02:sda<=0;

8'h03:scl<=0; //address 8'h04:sda<=1;

8'h05:scl<=1;

8'h06:scl<=0;

8'h07:sda<=0;

8'h08:scl<=1;

8'h09:scl<=0;

15

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; //ack 8'h1b:scl<=0;

8'h1c:sda<=1; //4 8'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; //ack 8'h31:sda<=data[7]; 8'h32:scl<=1; 8'h33:scl<=0;

8'h34:sda<=data[6]; 8'h35:scl<=1; 16

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; //ack

8'h4a:scl<=1;

8'h4b:scl<=0;

8'h4c:scl<=1; //stop

8'h4d:sda<=1;

endcase

end

always @ (posedge plxs_clk) begin //sjb xianshi case(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; endcase

end

17

always @ (posedge div_clk) begin //iic for fb numb_fb<=numb_fb+8'b0000001; case(numb_fb)

8'h01:scl1<=1; //s

8'h02:sda1<=0;

8'h03:scl1<=0; //address 8'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;

8'h1b:scl1<=0;

8'h1c:sda1<=1;

8'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;

//ack //4 18

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; //ack

8'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; //ack

8'h4a:scl1<=1;

8'h4b:scl1<=0;

8'h4c:scl1<=1; //stop

8'h4d:sda1<=1;

endcase

end

always @ (posedge plxs_clk) begin //fb xianshi case(count_jcfb)

16'd50000:scpl_fb<=8'b11111001; 19

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_fb<=8'b10010000; 16'd05000:scpl_fb<=8'b10001000; endcase

end

always @ (posedge div_clk) begin //iic for sin numb_sin<=numb_sin+8'b0000001; case(numb_sin)

8'h01:scl2<=1; //s

8'h02:sda2<=0;

8'h03:scl2<=0; //address 8'h04:sda2<=1;

8'h05:scl2<=1;

8'h06:scl2<=0;

8'h07:sda2<=0;

8'h08:scl2<=1;

8'h09:scl2<=0;

8'h0a:sda2<=0;

8'h0b:scl2<=1;

8'h0c:scl2<=0;

8'h0d:sda2<=1;

8'h0e:scl2<=1;

8'h0f:scl2<=0;

8'h10:sda2<=0;

8'h11:scl2<=1;

8'h12:scl2<=0;

8'h13:sda2<=0;

8'h14:scl2<=1;

8'h15:scl2<=0;

8'h16:scl2<=1;

8'h17:scl2<=0;

8'h18:scl2<=1;

8'h19:scl2<=0;

8'h1a:scl2<=1; //ack

8'h1b:scl2<=0;

8'h1c:sda2<=1; //4

8'h1d:scl2<=1;

20

8'h1e:scl2<=0;

8'h1f:sda2<=1;

8'h20:scl2<=1;

8'h21:scl2<=0;

8'h22:sda2<=0; 8'h23:scl2<=1;

8'h24:scl2<=0;

8'h25:scl2<=1;

8'h26:scl2<=0;

8'h27:scl2<=1;

8'h28:scl2<=0;

8'h29:scl2<=1;

8'h2a:scl2<=0;

8'h2b:scl2<=1;

8'h2c:scl2<=0;

8'h2d:scl2<=1;

8'h2e:scl2<=0;

8'h2f:scl2<=1;

8'h30:scl2<=0; //ack 8'h31:sda2<=data_sin[7]; 8'h32:scl2<=1;

8'h33:scl2<=0;

8'h34:sda2<=data_sin[6]; 8'h35:scl2<=1;

8'h36:scl2<=0;

8'h37:sda2<=data_sin[5]; 8'h38:scl2<=1;

8'h39:scl2<=0;

8'h3a:sda2<=data_sin[4]; 8'h3b:scl2<=1;

8'h3c:scl2<=0;

8'h3d:sda2<=data_sin[3]; 8'h3e:scl2<=1;

8'h3f:scl2<=0;

8'h40:sda2<=data_sin[2]; 8'h41:scl2<=1;

8'h42:scl2<=0;

8'h43:sda2<=data_sin[1]; 8'h44:scl2<=1;

8'h45:scl2<=0;

8'h46:sda2<=data_sin[0]; 8'h47:scl2<=1;

8'h48:scl2<=0;

8'h49:sda2<=0; //ack 21

8'h4a:scl2<=1;

8'h4b:scl2<=0;

8'h4c:scl2<=1; //stop

8'h4d:sda2<=1;

endcase

end

always @ (posedge plxs_clk) begin //sin xianshi case(count_jcsin)

16'd50000:scpl_sin<=8'b11111001; 16'd25000:scpl_sin<=8'b10100100; 16'd16666:scpl_sin<=8'b10110000; 16'd12500:scpl_sin<=8'b10011001; 16'd10000:scpl_sin<=8'b10010010; 16'd08333:scpl_sin<=8'b10000010; 16'd07142:scpl_sin<=8'b11111000; 16'd06250:scpl_sin<=8'b10000000; 16'd05555:scpl_sin<=8'b10010000; 16'd05000:scpl_sin<=8'b10001000; endcase

end

结果演示图

波形发生器课设报告

波形发生器课设报告

波形发生器课设报告

波形发生器课设报告

22

相关推荐