网站关闭申请书,中国招标投标服务平台官网,建网站好,武进建设局网站首页声明#xff1a;代码部分使用了AI工具
实验六 综合考核
Quartus 18.0 FPGA 5CSXFC6D6F31C6N
1. 实验项目
要求利用硬件描述语言Verilog#xff08;或VHDL#xff09;、图形描述方式、IP核#xff0c;结合数字系统设计方法#xff0c;在Quartus开发环境下#xff…
声明代码部分使用了AI工具
实验六 综合考核
Quartus 18.0 FPGA 5CSXFC6D6F31C6N
1. 实验项目
要求利用硬件描述语言Verilog或VHDL、图形描述方式、IP核结合数字系统设计方法在Quartus开发环境下2人1组本班内自由组队从下列3个实验项目中任选1项3选1进行实现。因材料限制每个项目每个班级最多6组选择第一次实验时填表选定不得变更。
实验分为2部分内容基础实验12学时使用FPGA开发板实现。拓展实验需要搭建外围电路与开发板连接实现相关功能可利用课余时间进行开放实验第二次实验时进行集中实验验收4学时。
注意事项需自带计算机安装有Quartus、multisim等软件还需带烙铁、焊锡焊接工具和万用表等实验室提供相关元器件。 实验项目名称 基础实验内容12学时 拓展实验内容 开放实验4学时验收实验 项目1简易频率计的设计与实现 利用硬件描述语言或图形描述方式结合数字电路设计方法实现以下功能 1.对1kHz-1MHz方波信号的频率测量功能进行quartus/modelsim仿真验证60分 2.使用实验室提供开发板完成对1kHz-1MHz方波信号的频率测量功能控制数码管实时显示测量结果。20分 3.可通过开发板上的USB-Uart接口将测量频率结果传送至计算机上的串口调试助手显示。20分 在基础实验内容的基础上使用元器件搭建外围电路经multisim/proteus仿真验证后制作实物电路与开发板连接实现以下功能 1.可对幅度0.1V-4V频率1kHz-10kHz范围的正弦信号进行频率测量60分 2.对输入正弦信号同时进行幅度和频率测量并将测量结果实时显示并发送至计算机。40分 项目2简易信号发生器的设计与实现 利用硬件描述语言或图形描述方式结合数字电路设计方法实现以下功能 1.产生1kHz-1MHz范围内的方波信号信号频率可由按键调节步进间隔1kHz进行quartus/modelsim仿真验证60分 2.使用实验室提供开发板输出1kHz-1MHz方波信号信号频率可由按键调节控制数码管实时显示当前频率值。20分 3.实现用计算机调节开发板输出方波信号频率的功能。20分 在基础实验内容的基础上使用元器件搭建外围电路经multisim/proteus仿真验证后制作实物电路与开发板连接实现以下功能 1.产生1kHz-10kHz范围内的三角波信号频率可由按键和计算机进行调节60分 2.产生7kHz-10kHz范围内的正弦波信号频率可由按键和计算机进行调节。40分 项目3电压电流表的设计与实现 利用硬件描述语言或图形描述方式结合数字电路设计方法实现以下功能 1.使用实验室提供开发板对介于0-4V之间的直流电压值进行测量分辨率1mV测量结果在数码管上显示每秒至少刷新1次60分 2.对两路0-4V之间的直流电压值同时进行测量测量结果交替显示。20分 3.可通过开发板上的USB-Uart接口将测量电压结果传送至计算机上的串口调试助手显示。20分 在基础实验内容的基础上使用元器件搭建外围电路经multisim/proteus仿真验证后制作实物电路与开发板连接实现以下功能 1.对直流电源输出到负载上的电压和电流进行测量并将测量结果实时显示并发送至计算机60分 2.使用电压电流测量结果计算负载实时功率和耗电量将计算结果发送至计算机。40分
2. 实验要求
1每人对于所选择完成的实验项目通过查阅资料理解实验原理设计实验方案并将实验原理和方案写于实验报告中。
2按照实验要求完成电路设计、通过编译无误后完成测试代码编写实现功能仿真记录仿真波形并写于实验报告。
3编译的输出文件下载到FPGA电路板完成指定功能进行拍照和结果分析写入实验报告。
4基础实验内容完成后由老师验收并记录实验成绩。
5设计外围电路完成相关功能使用Multisim、Proteus对外围电路功能进行验证截图写入实验报告。
6利用开放实验时间搭建外围电路实物进行测试验证对测试结果进行拍照和分析写入实验报告。
7集中验收实验时经老师检查电路无误后将搭建电路与FPGA开发板连接进行测试。测试完成后由老师验收并记录实验成绩认真撰写实验报告按时上交实验报告。
8实验六实验报告使用智慧树平台网上填写提交每组仅需提交1份按自己选择题目提交相应作业截止时间为第二次实验当晚23:59前。建议边做实验边拍照记录减少实验报告撰写时间。
3. 实验器材清单
1FPGA开发板有DE1SOC和DE10-Standard这2种随机领用看准自己开发板型号查找相关资料。
2直流电源、信号源、示波器、万用表需自备。
3直插1/4W电阻 阻值10Ω, 22Ω, 47Ω, 100Ω , 150Ω , 200Ω , 220Ω , 270Ω , 330Ω, 470Ω, 510Ω, 680Ω, 1kΩ, 2kΩ, 2.2kΩ, 3.3kΩ, 4.7kΩ, 5.1kΩ, 6.8kΩ, 10kΩ, 20kΩ, 47kΩ, 51kΩ, 68kΩ, 100kΩ, 220kΩ, 300kΩ, 470kΩ, 680kΩ, 1MΩ
4瓷片电容 容值2pF, 3pF, 5pF, 10pF, 15pF, 22pF, 30pF, 47pF, 68pF, 75pF, 82pF, 100pF, 150pF, 220pF, 330pF, 470pF, 680pF, 1npF, 1.5nF, 2.2nF, 3.3nF, 4.7nF, 6.8nF, 10nF, 15nF, 22nF, 47nF, 68nF, 100nF
3. 实验器材清单
5电解电容焊接务必注意正负极
50V0.22uF, 50V0.47uF, 50V1uF, 50V2.2uF, 50V4.7uF, 25V10uF, 25V22uF, 16V33uF, 16V47uF, 16V100uF, 10V220uF, 10V470uF
6二极管
1N4148, 1N4007, 1N5819, 1N5399, FR107, FR207, 1N5408, 1N5822
7运算放大器LM324及芯片座
8比较器LM393及芯片座
9USB转TTL转换器计算机和开发板通信用用后需归还
驱动及安装说明 https://zhuanlan.zhihu.com/p/370245114
10万用板5*7cm单面每组一块, 杜邦线。 声明我们选择的是项目二隔得时间太久有的照片找不着了分频器部分由于采用了除法受限于有限字长得到的实际频率有一定误差虽然人为进行了修正但在高频时仍比较明显可以考虑其他算法改进正弦波部分的带通滤波器没有问题但三角波部分的积分器需要改进现在的问题是频率较高时幅值衰减较明显。
考核内容
1.1.【问答题】(10分) 产生1kHz-1MHz范围内的方波信号信号频率可由按键调节步进间隔1kHz,进行 quartus,/modelsim仿真验证简述该设计的主要功能和原理
主要功能 可以通过按钮调节输出1kHz-1MHz的方波、7kHz-10kHz正弦波、1kHz-10kHz三角波步进均为1kHz可以通过串口从电脑上控制输出1kHz-1MHz的方波、7kHz-10kHz正弦波、1kHz-10kHz三角波步进均为1kHz。 不过串口控制功能只能输入十六进制数所以在测试时需要先把想输入的十进制数转换为十六进制允许输入范围为0x0001~0x03E8注意1MHz即为1000kHz我们这里使用三位数码管故显示为000。比如我想通过串口控制输出726kHz方波只需在电脑串口助手上输入02D6再发送即可。
原理时钟脉冲信号经过可调分频器后得到可控频率的矩形脉冲信号矩形脉冲信号分别经过滤波器和积分器后可得到正弦波和三角波。编写一个调节模块用以传递输入的指令并联系输入部分和输出部分。
1.2.【问答题】(5分) 上传设计框图、源程序等截图 1.3.【问答题】(5分) 上传仿真结果截图描述图中结果
引脚分配 quartus/modelsim联合仿真 1.4.【问答题】(5分) 使用实验室提供开发板输出1kHz-1MHz方波信号信号频率可由按键调节控制数码管实时显示 当前频率值。上传输出最低频率方波的照片照片中需包含设置频率和示波器测量波形。 实验六项目二按钮演示 实验六项目二串口演示 1.5.【问答题】(5分) 上传输出最高频率方波的照片照片中需包含设置频率和示波器测量波形。
找不着照片了
1.6.【问答题】(5分) 你最终实现了多少范围内的频率输出功能误差是多少
范围达到了题目要求这里误差不是我算的不知道。
1.7.【问答题】(10分) 在基础实验内容的基础上使用元器件搭建外围电路简述外围电路原理
带通滤波器设计 1.8.【问答题】(10分) 上传外围电路图及仿真测试结果并说明仿真情况
带通滤波器 积分器 1.9.【问答题】(10分) 制作实物电路与开发板连接实现以下功能 产生1kHz-10kHz范围内的三角波信号频率可由按键和计算机进行调节上传最低频率和最高频 率时输出三角波的测量结果照片。 1.10.【问答题】(10分) 产生7kHz-10kHz范围内的正弦波信号频率可由按键和计算机进行调节。上传最低频率和最高频 率时输出正弦波的测量结果照片。 2.【问答题】(10分) 上传搭建的外围电路与开发板连接的实物照片。 3.【问答题】(10分) 你在实验调试过程中出现了哪些问题如何解决的有何实验心得体会
(1)有时会出现不明原因的报错报错中会出现“License”相关字眼这是在程序运行途中发生了破解失效需要妥善保存工程后再一次进行破解。
(2)在仿真过程中,程序选择的文件保存路径经常会出现问题,“.vwf”文件与“.vt文件可能会被写入不同路径这会导致报错并且仿真错误。摸索出来的解决方法是在可能的路径中分别复制一份对应文件。
(3)可以通过给FPGA断电后再上电来清除上一次下载到FPGA中的程序。
(4)遇到报错,可将报错信息输送给一些大语言模型,往往会得到不错的改进建议,适时适量使用AI工具并非坏事。
附录代码及资源
代码
dds.v
//主程序
module dds(input wire clk, // FPGA主时钟input wire rst_n, // 复位信号input wire button_up, // 增加频率按钮input wire button_down, // 减少频率按钮input wire uart_rx, // 计算机控制的UART输入input wire select_control,// 选择控制信号0为按键控制1为UART控制output wire wave_out, // 输出方波信号output wire [6:0] hex0, // 数码管显示output wire [6:0] hex1,output wire [6:0] hex2
);wire [19:0] freq_from_button; // 来自按键控制的频率选择wire [19:0] freq_from_uart; // 来自UART控制的频率选择reg [19:0] freq_sel; // 实际选择的频率// 按键控制模块button_control btn_ctrl (.clk(clk),.rst_n(rst_n),.button_up(button_up),.button_down(button_down),.freq_sel(freq_from_button));// 方波信号生成模块clock_divider clk_div (.clk(clk),.rst_n(rst_n),.freq_sel(freq_sel),.wave_out(wave_out));// 数码管显示模块seven_segment_display display (.clk(clk),.rst_n(rst_n),.freq_sel(freq_sel),.hex0(hex0),.hex1(hex1),.hex2(hex2));// 计算机调节模块uart_control uart_ctrl (.clk(clk),.rst_n(rst_n),.uart_rx(uart_rx),.freq_sel(freq_from_uart));// 多路选择器always (*) beginif (select_control) freq_sel freq_from_uart; // 如果select_control为1用UART控制频率else freq_sel freq_from_button; // 否则用按键控制频率endendmoduleclock_divider.v
// 时钟分频器模块
module clock_divider(input wire clk, // FPGA主时钟例如50MHzinput wire rst_n, // 复位信号input wire [31:0] freq_sel, // 选择的频率步进为1kHzoutput reg wave_out // 输出方波信号
);reg [31:0] counter;reg [31:0] threshold;always (posedge clk or negedge rst_n) beginthreshold 85899*freq_sel;if(!rst_n) counter 0; else counter counter threshold; end always(posedge clk or negedge rst_n) begin if(!rst_n) wave_out 0; else if(counter 32h7FFF_FFFF) wave_out 0; else wave_out 1; end endmodule
button_control.v
module button_control(input wire clk,input wire rst_n,input wire button_up, // 增加频率按钮input wire button_down, // 减少频率按钮output reg [19:0] freq_sel // 输出选择的频率
);reg [19:0] freq_max 20d1000; // 最大频率 1 MHz (1000 kHz)reg [19:0] freq_min 20d1; // 最小频率 1 kHzreg button_up_last;reg button_down_last;// 检测下降沿wire button_up_fall (button_up_last 1) (button_up 0);wire button_down_fall (button_down_last 1) (button_down 0);always (posedge clk) beginif (!rst_n) beginfreq_sel 20d1;button_up_last 1b1; button_down_last 1b1; // 默认频率1 kHzend else begin// 更新按键的上一个状态button_up_last button_up;button_down_last button_down;// 处理按键下降沿if (button_up_fall freq_sel freq_max)freq_sel freq_sel 1;else if (button_down_fall freq_sel freq_min)freq_sel freq_sel - 1;end
endendmodule
seven_segment_display.v
// 数码管显示模块
module seven_segment_display(input wire clk,input wire rst_n,input wire [19:0] freq_sel, // 当前选择的频率值单位kHzoutput reg [6:0] hex0, // 数码管显示频率的最低位output reg [6:0] hex1, // 数码管显示频率的中间位output reg [6:0] hex2 // 数码管显示频率的最高位
);wire [3:0] digit0 freq_sel % 10; // 频率个位wire [3:0] digit1 (freq_sel / 10) % 10; // 频率十位wire [3:0] digit2 (freq_sel / 100) % 10; // 频率百位always (*) beginhex0 digit_to_segment(digit0);hex1 digit_to_segment(digit1);hex2 digit_to_segment(digit2);endfunction [6:0] digit_to_segment;input [3:0] digit;case (digit)4d0: digit_to_segment 7b1000000; // 显示04d1: digit_to_segment 7b1111001; // 显示14d2: digit_to_segment 7b0100100; // 显示24d3: digit_to_segment 7b0110000; // 显示34d4: digit_to_segment 7b0011001; // 显示44d5: digit_to_segment 7b0010010; // 显示54d6: digit_to_segment 7b0000010; // 显示64d7: digit_to_segment 7b1111000; // 显示74d8: digit_to_segment 7b0000000; // 显示84d9: digit_to_segment 7b0010000; // 显示9default: digit_to_segment 7b1111111; // 默认不显示endcaseendfunction
endmodule
uart_control.v
module uart_control(input wire clk, // FPGA主时钟input wire rst_n, // 复位信号input wire uart_rx, // 接收来自计算机的UART信号output reg [19:0] freq_sel // 输出设置的频率值
);wire [7:0] uart_data; // 单字节UART数据wire uart_data_ready; // 数据是否接收完成的标志reg [15:0] received_data; // 两字节拼接后的数据reg [1:0] byte_counter; // 字节计数器跟踪接收的字节数reg data_processed; // 数据是否已处理标志// 实例化UART接收器uart_receiver uart_rx_inst (.clk(clk),.rst_n(rst_n),.rx(uart_rx),.data(uart_data),.data_ready(uart_data_ready));always (posedge clk or negedge rst_n) beginif (!rst_n) beginfreq_sel 20d1; // 默认频率1 kHzreceived_data 16d0;byte_counter 2d0;data_processed 1b0;end else begin// 当UART数据接收完成且尚未处理时if (uart_data_ready !data_processed) begin// 处理接收到的第一个或第二个字节if (byte_counter 2d0) beginreceived_data[7:0] uart_data; // 保存第一个字节byte_counter byte_counter 1;end else if (byte_counter 2d1) beginreceived_data[15:8] uart_data; // 保存第二个字节byte_counter 2d0; // 重置字节计数器// 检查拼接后的频率是否在有效范围内if (received_data 16d1 received_data 16d1000) beginfreq_sel {4d0, received_data}; // 将16位数据扩展为20位enddata_processed 1b1; // 标记数据已处理endend// 当数据未准备好时重置标志以等待下一个数据if (!uart_data_ready) begindata_processed 1b0;endendend
endmoduleuart_receiver.v
module uart_receiver (input wire clk, // FPGA主时钟input wire rst_n, // 复位信号input wire rx, // UART接收信号output reg [7:0] data, // 接收到的数据output reg data_ready // 数据接收完成标志
);parameter CLK_FREQ 50000000; // FPGA主时钟频率例如50MHzparameter BAUD_RATE 9600; // UART波特率例如9600localparam BIT_PERIOD CLK_FREQ / BAUD_RATE; // 每个位的时钟周期数reg [15:0] clk_counter; // 时钟计数器reg [3:0] bit_index; // 当前位索引reg [7:0] rx_shift_reg; // 接收移位寄存器reg receiving; // 接收状态标志always (posedge clk or negedge rst_n) beginif (!rst_n) beginclk_counter 16d0;bit_index 4d0;rx_shift_reg 8d0;data_ready 1b0;receiving 1b0;end else begin// 开始接收检测到起始位rx 0if (!receiving rx 1b0) beginreceiving 1b1;clk_counter 16d0;bit_index 4d0;data_ready 1b0;end// 接收状态按波特率接收位if (receiving) beginif (clk_counter BIT_PERIOD - 1) beginclk_counter 16d0;if (bit_index 4d8) begin// 停止位接收完成数据完整receiving 1b0;data rx_shift_reg; // 将移位寄存器中的数据存入datadata_ready 1b1; // 设置数据接收完成标志end else begin// 继续接收数据位移位存储rx_shift_reg {rx, rx_shift_reg[7:1]};bit_index bit_index 1;endend else beginclk_counter clk_counter 1;endend else begindata_ready 1b0; // 重置data_ready标志endendendendmodule资源
1.Quartus搭配Modelsim仿真全流程/Bug解决文章浏览阅读1.6w次点赞20次收藏178次。Quartus搭配Modelsim仿真全流程教学可能遇到的问题以及解决方法_quartus仿真https://blog.csdn.net/weixin_43680772/article/details/117791151?fromshareblogdetailsharetypeblogdetailsharerId117791151sharereferPCsharesourceAhandsomeAsharefromfrom_linkhttps://blog.csdn.net/weixin_43680772/article/details/117791151?fromshareblogdetailsharetypeblogdetailsharerId117791151sharereferPCsharesourceAhandsomeAsharefromfrom_link
Quartus使用步骤及联合Modelsim仿真教程文章浏览阅读2.1w次点赞52次收藏300次。Quartus使用记录及与modelsim联合仿真_quartus仿真https://blog.csdn.net/m0_64605336/article/details/134355651?fromshareblogdetailsharetypeblogdetailsharerId134355651sharereferPCsharesourceAhandsomeAsharefromfrom_linkhttps://blog.csdn.net/m0_64605336/article/details/134355651?fromshareblogdetailsharetypeblogdetailsharerId134355651sharereferPCsharesourceAhandsomeAsharefromfrom_link
2.Quartus串口驱动及USB-Blaster驱动下载指南https://blog.csdn.net/gitblog_09700/article/details/143154139https://blog.csdn.net/gitblog_09700/article/details/143154139
3.AI工具ChatGPThttps://chat.openai.com/https://chat.openai.com/
豆包https://www.doubao.com/chat/2377401https://www.doubao.com/chat/2377401
DeepSeekhttps://chat.deepseek.com/https://chat.deepseek.com/
4.使用手册Terasic - All FPGA Boards - Cyclone V - DE1-SoC Boardhttps://www.terasic.com.tw/cgi-bin/page/archive.pl?LanguageEnglishCategoryNo167No836PartNo4https://www.terasic.com.tw/cgi-bin/page/archive.pl?LanguageEnglishCategoryNo167No836PartNo4
Terasic - SoC Platform - Cyclone - DE10-Standardhttps://www.terasic.com.tw/cgi-bin/page/archive.pl?LanguageEnglishCategoryNo205No1081PartNo4https://www.terasic.com.tw/cgi-bin/page/archive.pl?LanguageEnglishCategoryNo205No1081PartNo4