西北工业大学课程设计报告 题
学
专
班
日 目: 波形发生器 院 自动化学院 业 自动化 级 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
课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx2…
目录1课程设计目的12课程设计题目和实现目标13设计方案14Proteus仿真原理图15程序流程图16程序代码17调试总结18设计…
课题名称多种波形发生器课题代码院系专业电气工程及其自动化班级学生时间指导教师签名教研室主任系主任签名一设计目的1了解并掌握电子电路…
单片机及DSP课程设计报告专业电子信息工程班级信息101姓名史延凯学号指导教师何香铃时间20xx061728通信与电子工程学院1目…
西北工业大学课程设计报告题学专班日目波形发生器院自动化学院业自动化级09031201期20xx年1月15日摘要21题目本次实验主要…
课程设计课程名称模拟电子技术基础课程设计题目名称波形发生电路学生学院物理与光电工程学院专业班级电子科学与技术5班学号学生姓名指导教…
目录1课程设计目的12课程设计题目和实现目标13设计方案14Proteus仿真原理图15程序流程图16程序代码17调试总结18设计…
课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx2…
单片机原理及系统课程设计专业自动控制班级姓名学号指导教师兰州交通大学自动化与电气工程学院年月日单片机原理及系统课程设计报告波形发生…
国家电工电子实验教学中心模拟电子技术实验报告实验题目多种波形发生器学院电子信息工程学院专业自动化1103学生姓名高帅学号11212…
波形发生器设计院校电子与信息工程系专业班级姓名学号指导老师目录一二三设计任务与要求3设计原理3设计电路分析和完整电路图431控制器…