华为杯报告_匡鑫_刘洋 Verilog
- 格式:doc
- 大小:1.53 MB
- 文档页数:10
22年华为杯题型方法华为杯全国大学生智能硬件设计大赛一直以来都备受瞩目,每年吸引众多高校学子积极参与。
2022年的华为杯赛事已经落下帷幕,本文将为大家总结本次比赛的特点、题型分类以及解题方法,并为今后的备赛提供一些建议。
一、华为杯赛事简介华为杯全国大学生智能硬件设计大赛旨在激发大学生创新意识,提高创新能力,培养创新型人才。
赛事分为初赛、复赛和决赛三个阶段,参赛选手需在规定时间内完成各项任务,展示自己的硬件设计能力。
二、2022年华为杯题型分类1.创意设计类:此类题目要求选手针对给定场景或需求,设计具有创新性和实用性的智能硬件产品。
2.技术实现类:此类题目侧重于考察选手对硬件技术原理的理解和运用,要求选手完成特定功能模块的设计和实现。
3.系统集成类:此类题目要求选手将多个硬件模块整合成一个完整的系统,展示系统的稳定性和协同性能。
4.人工智能类:此类题目主要考察选手对人工智能技术的应用和创新,包括算法设计、模型训练等。
三、解题方法与策略1.充分了解赛事规则和评分标准,明确题目要求,避免走弯路。
2.注重团队协作,明确分工,发挥团队成员的优势,提高工作效率。
3.善于借鉴往届优秀作品和现有技术成果,博采众长,为自己的设计增添亮点。
4.关注前沿技术动态,掌握核心技术,提升自身竞争力。
四、备赛指南1.提前做好准备,积累硬件设计相关知识和技能。
2.参加培训课程,提升自己的技术水平和实践能力。
3.组队参赛,寻找志同道合的队友,共同进步。
4.多参加模拟赛和热身赛,熟悉赛事流程,提高应变能力。
总之,华为杯全国大学生智能硬件设计大赛为广大学子提供了一个展示自己才华的舞台。
要想在比赛中脱颖而出,需要扎实的技术功底、创新思维和团队协作。
第十九届华为杯全国研究生数学建模竞赛题目解析尊敬的读者,您好!欢迎您参加第十九届华为杯全国研究生数学建模竞赛。
本文将为您详细解析本届竞赛的题目,帮助您更好地理解题目要求,掌握解题思路,提高竞赛成绩。
一、竞赛背景及意义全国研究生数学建模竞赛自创办以来,已成为我国研究生科技创新的一项重要赛事。
本届竞赛吸引了众多高校和研究机构的研究生参加,旨在培养研究生的创新意识、团队协作精神和实际问题解决能力。
华为杯作为赞助商,一直致力于支持我国研究生教育事业,推动科技创新。
二、题目分析本届竞赛题目涉及多个领域,如数学、物理、计算机科学等。
题目具有较高的难度和实用性,要求参赛者具备扎实的理论基础和实际应用能力。
以下是本届竞赛题目的简要概述:1.题目一:XXX问题(1)问题背景及描述:XXX(2)数学模型建立:XXX(3)求解方法及算法:XXX(4)结果分析与讨论:XXX2.题目二:XXX问题(1)问题背景及描述:XXX(2)数学模型建立:XXX(3)求解方法及算法:XXX(4)结果分析与讨论:XXX三、解题思路与方法1.深入阅读题目,理解题意。
在参赛过程中,首先要仔细阅读题目,确保自己对题目的理解准确无误。
2.建立数学模型。
针对题目要求,结合自身专业知识,建立合适的数学模型。
3.选择合适的求解方法。
根据数学模型,选用相应的求解方法,如数值方法、优化方法等。
4.编程实现与结果分析。
利用编程工具(如MATLAB、Python等)实现算法,得到结果,并对结果进行分析。
5.撰写论文。
按照竞赛论文格式要求,撰写论文,包括问题背景、数学模型、求解方法、结果分析等。
四、优秀论文案例解析在本届竞赛中,部分优秀论文展示了参赛者在选题、建模、求解和论文撰写等方面的出色表现。
以下是对优秀论文案例的简要分析:1.选题方面:优秀论文选题具有较强的创新性和实际意义,既体现了参赛者的专业素养,也为解决实际问题提供了新思路。
2.建模方面:优秀论文建立了较为完善的数学模型,能够较好地反映问题的本质。
2023华为杯数字建模e题思路随着数字技术的快速发展,数字建模在各个领域都扮演着重要的角色。
2023华为杯数字建模e题旨在让参赛者运用数字建模技术解决实际问题。
本文将围绕这一主题,探讨数字建模的思路与方法。
1.问题背景首先,我们需要了解2023华为杯数字建模e题的具体背景和问题。
根据赛题要求,该题目可能涉及到某个实际问题,比如城市交通规划、环境监测、资源优化等。
因此,我们需要针对具体问题进行思考和分析。
2.数据采集与处理在进行数字建模之前,我们需要收集与问题相关的数据。
这些数据可能来自于传感器、社交媒体、数据库等多个渠道。
在数据采集过程中,需要注意数据的准确性和时效性。
采集到的数据需要进行处理,以便进行后续的建模和分析。
数据处理包括数据清洗、数据转换、数据归一化等步骤。
通过合适的处理方法,可以使数据更好地满足建模的需求。
3.建模方法选择在进行数字建模时,我们需要选择适合的建模方法。
常见的建模方法包括数学建模、统计建模、机器学习等。
根据问题的特点和数据的性质,选择合适的建模方法可以提高模型的准确性和可解释性。
以城市交通规划为例,我们可以运用图论、网络模型等数学建模方法,对路网进行分析和优化。
对于环境监测问题,可以利用统计建模方法,对环境因素进行预测和评估。
对于资源优化问题,可以考虑运用机器学习方法,建立优化模型以实现资源的最大化利用。
4.模型验证与评估在建立数字模型之后,需要对模型进行验证和评估。
模型验证是指将模型应用于新的数据,以验证其预测能力和泛化能力。
模型评估是指对模型的性能进行量化评价,比如准确率、召回率等指标。
通过模型验证和评估,我们可以判断模型的有效性和可靠性。
如果模型的表现不佳,我们可以根据评估结果对模型进行改进或调整。
5.模型应用与推广最后,我们需要将建立好的数字模型应用于实际问题,并推广其应用。
通过模型的应用,可以为决策者提供科学依据,帮助其做出更好的决策。
同时,我们也需要将模型的应用进行推广,让更多的人了解和使用数字建模技术。
2023华为杯数字建模e题思路1. 背景介绍2023华为杯数字建模赛是一项具有广泛参与性和专业性的比赛,要求参赛者通过数学建模的方法解决实际工程、经济或社会问题。
其中e 题是比赛中最具挑战性和技术含量的部分,需要参赛者在有限的时间内,利用所学知识和技能,解决一个复杂的实际问题。
本文将围绕2023华为杯数字建模赛e题展开讨论,探究解题思路和方法。
2. 思路探讨2023华为杯数字建模e题通常会涉及多个学科领域,如数学、物理、工程等。
参赛者首先需要对题目进行全面的评估和分析,理清题目所涉及的各个方面,确定解题的关键点和难点。
在解题过程中,可以采取从简到繁的方法,即先从问题的主要部分入手,逐步引入其他影响因素,逐步建立完整的数学模型或工程模型。
参赛者还可以利用数学软件或仿真软件进行模拟实验,验证自己的模型和算法,并对结果进行分析和解释。
通过不断地调整和优化模型,最终得到符合实际的解决方案。
3. 主题文字重提在解题过程中,参赛者需要注重思维的广度和深度,要考虑问题的多个方面和可能的影响因素,同时深入研究每个细节。
在建立数学模型或工程模型时,需要多次提及并应用主题中的关键字,比如“数字建模”、“华为杯”等,以确保模型与题目紧密相关,并能够充分地展现参赛者的专业知识和技能。
4. 总结与展望2023华为杯数字建模e题的思路和方法需要参赛者具备扎实的数学基础和工程技能,同时需要有良好的逻辑思维能力和创新能力。
解题过程中,参赛者应注重深度和广度的结合,要有全局观和细节观,善于从整体到局部的分析和建模。
在今后的比赛和学习中,需要不断积累和提升自己的知识和能力,以应对更多挑战性的数字建模问题。
5. 个人观点作为数字建模的爱好者和专业者,我认为2023华为杯数字建模e题是一项极具挑战性和价值的比赛。
参与其中可以锻炼自己在解决实际问题时的能力和水平,同时也可以结识更多志同道合的朋友,促进学术交流和共同进步。
希望未来能有更多的学生和工程师参与到这项比赛中来,共同推动数字建模领域的发展和创新。
Verilog 实验报告一、实验目的本次 Verilog 实验的主要目的是通过实际编写代码和进行仿真,深入理解 Verilog 语言的基本语法、逻辑结构和时序特性,掌握数字电路的设计方法和实现过程,并能够运用Verilog 实现简单的数字逻辑功能。
二、实验环境本次实验使用的软件工具是 Xilinx Vivado 20192,硬件平台是Xilinx Artix-7 开发板。
三、实验内容(一)基本逻辑门的实现1、与门(AND Gate)使用 Verilog 语言实现一个两输入的与门。
代码如下:```verilogmodule and_gate(input a, input b, output out);assign out = a & b;endmodule```通过编写测试激励文件对该模块进行仿真,验证其逻辑功能的正确性。
2、或门(OR Gate)同样实现一个两输入的或门,代码如下:```verilogmodule or_gate(input a, input b, output out);assign out = a | b;endmodule```3、非门(NOT Gate)实现一个单输入的非门:```verilogmodule not_gate(input a, output out);assign out =~a;endmodule```(二)组合逻辑电路的实现1、加法器(Adder)设计一个 4 位的加法器,代码如下:```verilogmodule adder_4bit(input 3:0 a, input 3:0 b, output 4:0 sum);assign sum = a + b;endmodule```2、减法器(Subtractor)实现一个 4 位的减法器:```verilogmodule subtractor_4bit(input 3:0 a, input 3:0 b, output 4:0 diff);assign diff = a b;endmodule```(三)时序逻辑电路的实现1、计数器(Counter)设计一个 4 位的计数器,能够在时钟上升沿进行计数,代码如下:```verilogmodule counter_4bit(input clk, output 3:0 count);reg 3:0 count_reg;always @(posedge clk) begincount_reg <= count_reg + 1;endassign count = count_reg;endmodule```2、移位寄存器(Shift Register)实现一个 4 位的移位寄存器,能够在时钟上升沿进行左移操作:```verilogmodule shift_register_4bit(input clk, input rst, output 3:0 data_out);reg 3:0 data_reg;always @(posedge clk or posedge rst) beginif (rst)data_reg <= 4'b0000;elsedata_reg <={data_reg2:0, 1'b0};endassign data_out = data_reg;endmodule```四、实验结果与分析(一)基本逻辑门的结果通过仿真,与门、或门和非门的输出结果与预期的逻辑功能完全一致,验证了代码的正确性。
整理文本西北工业大学《 FPGA 技术实验》实验报告二(高效除法器 )学院:软件与微电子学院学号:姓名:专业:微电子学实验时间:2011.10.12实验地点:毅字楼 335指导教师:王少熙西北工业大学2010年 10 月一、实验目的及要求实验目的 : 1.进一步了解熟悉verilog 语句语法掌握条件语句在简单建模中的应用,学会建模仿真综合 .2.熟练运用 modelsim进行调试模拟仿真 .3.初步学会运用综合工具进行综合,熟悉 synplify.实验要求 :用verilog实现一个被除数为8 位,除数为 4 位的高效除法器 .二、实验设备(环境)及要求ModelSim SE 6.2b及 Synplify Pro 9.6.2三、实验内容与步骤1.实验总体设计思路由于只有加法器 ,除法在计算机中是通过部分余数左移加除数补码或 0 实现 ,我们由此可以得到启示 ,也按照如此的思路进行 .整体思路是先将八位 (本来余数是四位的但是我们这里的余数不仅仅充当余数 ,还当中间变量把被除数从最高位一位一位的移到余数里 )余数清零 ,然后把被除数的最高位拼接到余数后面 ,此时余数与除数比较 , 若余数大于除数 ,则把他们俩的差作为新的余数 ,且把对应的商值为记 1; 若余数小于除数 ,则把对应位的商值记 0;进行下一步之前把被除数的第二高位继续拼接到余数后面 ,如此进行 ,循环八次即可 .最后结果是得到商和余数的形式 .其算法流图如下所示 :Start余数 rem=0;商 quo=0; i=7rem={rem[6:0],did[i]}是否rem>disquo[i]=1;i=i-1;quo[i]=0;rem=rem-dis;rem=rem;i=i-1;i<0否是得到 quo,rem.是 4 位,除数 (dis)是 2 位,商(quo)是 4 位 ,余数 (rem)是 4 位,设 did=0110,dis=10,我们来看看是怎么执行的.首先余数和商都清零 ,即 rem=0,quo=0;把被除数的最高位0 拼接到 rem的最低位 ,此时 rem=0000B,由于 rem 小于除数 dis=10,则商 quo[3]=0;下面进行第二次计算,把 did[2]拼接到 rem 最低位 ,此时 rem=0001,dis=10>rem,故 quo[2]=0;继续计算 , 把 did[1]拼接到 rem 最低位 ,此时 rem=0011,dis=10<rem,故quo[1]=1,rem=rem-quo=0011-10=0001;进行最后一轮运算 , 把 did[0]拼接到 rem 最低位 ,此时 rem=0010,dis=10=rem,因此 quo[0]=1,rem=rem-dis=0010-10=0000,至此我们已计算完毕商quo=0011,余数 rem=0000;计算简单快速 .2.测试平台设计模块设计`timescale 1ns/1nsmodule divider_8_4(did,// Divident被除数dis,// Divisor除数quo,// Quotient商rem,// Remainder 余数error//错误,如果除数为0.则error置1);parameter M=7;//被除数,余数,商的位数parameter N=3;//除数的位数input [M:0] did;input [N:0] dis;output [M:0] quo;output [M:0] rem;output error;reg [M:0] quo;reg [M:0] rem;reg error;integer i;//整数,用于计数always @(did or dis)//被除数,除数beginquo=0;rem=0;//开始余数和商清零if(dis==0)error=1;//若除数为0则显示错误else if(did<dis)//为了提高效率,在被除数小于除数时begin//商0,余数为除数rem=dis;quo=0;error=0;endelsebeginerror=0;for (i=8;i>0;i=i-1) //循环8次beginrem={rem[M-1:0],did[i-1]}; //把did[i-1]连接到rem后quo=quo<<1;//商左移一位if(rem>=dis)//若拼接后rem>=除数disbeginquo=quo+1; //商值自加1rem=rem-dis; //新余数变为旧余数减除数endendendend//结束endmoduleTesebench如下 :`timescale 1ns/1nsmodule divider_bench;reg [7:0] did;reg [3:0] dis;wire [7:0] quo;wire [7:0] rem;integer i;//整数,用于控制被除数变化integer j;//整数,用于控制除数变化divider_8_4 d1(did,dis,quo,rem,error); //实例化initialbeginfor(i=0;i<=255;i=i+1)//被除数从0到255begindid=i;for(j=0;j<=15;j=j+1)//除数从0到15变化#1 dis=j;endendinitialbegin$monitor($time,"divident=% divisor=%d quotient=%dremainder=%d",did,dis,quo,rem) ;endinitialbegin#1000 $finish;// 1000ns 时停止仿真endendmodule四、实验结果与数据处理1.Modelsim 仿真结果,波形图,代码覆盖率图等为了严谨 ,把所有的数值都测了一遍 (did 从 0 到 255,dis 从 0 到 15),从modeldim 仿真结果看到程序的正确性 ,鉴于数据较多这里只选择几组数据给予展示 :上图中从上到下一次代表被除数,除数 ,错误 ,商和余数 ,当被除数是 4.除数分别是 9,10,11,12,13,14,15时商为 0,余数分别 9,10,11,12,13,14,15.当被除数为 147,除数分别为 1,2,3,4,5,6,7时 ,商分别为 147,73,49,36,29,24,21,余数分别为 0,1,0,3,2,3,0结.果正确 .由上图可见代码覆盖率已达100%,非常好 .2.综合结果,布局布线结果,关键路径,资源利用率等。
2021年华为杯数学建模赛题【最新版】目录1.2021 年华为杯数学建模竞赛简介2.竞赛赛题概述3.参赛队伍组成及比赛过程4.赛题解析及建模思路5.比赛成果与评价6.总结正文一、2021 年华为杯数学建模竞赛简介2021 年华为杯数学建模竞赛,即第十八届中国研究生数学建模竞赛,是由教育部学位与研究生教育发展中心指导、中国科协青少年科技中心主办的一项面向在校研究生进行的数学建模应用研究学术竞赛活动。
此项竞赛旨在提高广大研究生建立数学模型、运用互联网信息技术解决实际问题的能力,培养科研创新精神和团队合作意识。
二、竞赛赛题概述2021 年华为杯数学建模竞赛的赛题分为四个,分别是:1.选取感兴趣的 20 个变量,对于 729 个属性变量建立回归和分类模型;2.建立五个因变量(admet)的分类模型;3.每个变量对活性的定量分析;4.对于给定的数据集,进行二维降维分析。
三、参赛队伍组成及比赛过程参赛队伍由三名在校研究生组成,比赛过程中,队员们需要充分发挥自己的专业技能和团队协作能力,共同完成赛题。
比赛时间为 76 小时,期间参赛队员需独立完成模型构建、计算、优化以及论文撰写等任务。
四、赛题解析及建模思路1.对于第一题,选取感兴趣的 20 个变量,队员们需要进行维度压缩,常用的方法有 PCA、Dan(深度自编码)等。
通过维度压缩,可以将高维数据降至低维,从而降低计算复杂度,提高模型训练效果。
2.第二题要求建立五个因变量的分类模型,这里可以尝试使用支持向量机(SVM)、决策树、随机森林等分类算法。
在建模过程中,需要对数据进行预处理,如特征选择、特征编码等,以提高模型性能。
3.第三题要求对每个变量对活性的定量分析,这需要运用到回归分析方法。
在回归分析中,可以通过拟合线性模型、多项式模型等,来研究变量与活性之间的关系。
4.第四题是关于二维降维分析,常用的方法有主成分分析(PCA)、t 分布邻域嵌入算法(t-SNE)等。
2023年华为杯数学建模写作模板尊敬的评委们:感谢您们百忙之中抽出时间来审阅我们的数学建模报告。
本文档将向您展示我们团队在2023年华为杯数学建模竞赛中所完成的工作,并详细介绍我们对于问题的解决方案和模型的建立与验证过程。
在这篇报告中,我们将按照以下的结构来展示我们的研究成果:第一部分:问题分析与建模思路在这一部分,我们将对于竞赛问题进行详细的分析,并分析问题的关键点与难点。
我们会给出我们的建模思路,并解释为什么我们选择了特定的建模方法来解决这一问题。
通过这一部分的介绍,您能够清晰地了解我们团队在问题分析和建模思路上所做的工作。
第二部分:模型建立与求解这一部分是我们报告的核心部分。
我们将详细地介绍我们建立的数学模型,并解释模型中每个变量和参数的含义与作用。
我们还会逐步展示模型求解的过程,包括数据的预处理、数值计算的方法与步骤。
通过这一部分的介绍,您能够了解我们是如何通过数学方法来解决这一问题的。
第三部分:模型验证与灵敏度分析为了验证我们建立的模型的有效性和准确性,我们进行了详细的模型验证过程。
我们将给出模型验证的指标和方法,并展示实际数据与模型结果的对比。
同时,我们还进行了灵敏度分析,以评估模型对于参数变化的敏感程度。
这一部分将展示我们模型的可靠性和鲁棒性。
第四部分:结果分析与优化方案在这一部分,我们将对模型的求解结果进行详细的分析,并给出针对不同情况下的优化方案。
我们将考虑实际应用中的限制和约束条件,并提出可行的解决方案和策略。
我们的目标是通过科学合理的分析和优化来达到问题的最佳解决方案。
最后,我们将通过总结来总结我们的研究成果,并对未来的工作和改进方向提出建议。
我们感谢您的审阅,并诚挚希望我们的报告能对您有所启发。
如果您在审阅过程中有任何问题或建议,我们将非常欢迎您的反馈和指导。
2021华为杯数学建模竞赛题目摘要:1.2021 华为杯数学建模竞赛简介2.竞赛题目概述3.竞赛题目分类及解题思路4.竞赛对参赛者的要求与挑战5.结论正文:【2021 华为杯数学建模竞赛简介】2021 华为杯数学建模竞赛是由中国数学会主办的一项面向全球高校大学生的竞技活动。
该竞赛旨在激发学生学习数学的积极性,提高学生运用数学知识解决实际问题的综合能力,推动数学教学体系、教学内容和方法的改革。
【竞赛题目概述】2021 华为杯数学建模竞赛的题目涉及多个领域,如数理化、环境生态、经济管理等。
题目有较大的灵活性,参赛者需要运用所学的数学知识,结合其他相关领域的知识,对题目进行深入研究,并撰写论文进行解答。
【竞赛题目分类及解题思路】本次竞赛题目分为A、B、C 三类,每类题目都有各自的特点和解题思路。
A 类题目:主要涉及数理化领域,参赛者需要运用相关数学理论和方法,对题目进行建模和求解。
B 类题目:主要涉及环境生态领域,参赛者需要运用概率论、统计学等相关数学知识,对题目进行分析和研究。
C 类题目:主要涉及经济管理领域,参赛者需要运用优化、图论等相关数学知识,对题目进行建模和求解。
【竞赛对参赛者的要求与挑战】本次竞赛对参赛者提出了较高的要求,参赛者需要具备较强的数学功底、良好的逻辑思维能力和团队协作精神。
在解题过程中,参赛者需要克服各种挑战,如理解题目、建立模型、求解问题等。
【结论】2021 华为杯数学建模竞赛为全球高校大学生提供了一个展示自己才能的平台。
参赛者需要运用所学的数学知识,结合其他相关领域的知识,对题目进行深入研究,并撰写论文进行解答。
电光学院第六届华为杯电子设计竞赛报告题目:数字AGC的FPGA实现学院:南京理工大学电光学院姓名:匡鑫、刘洋时间:2015年5月一、题目要求1.任务用数字方法设计一个自动增益控制(AGC)电路。
2.要求1.基本要求利用EDA实验平台中的A/D、D/A扩展版设计并实现一个AGC电路,要求输入信号频率为100KHz,最大幅度为2VPP,实现方法参考下图:(1)设计接口电路,用ADC对输入信号进行采样,并用DAC恢复输入信号。
(2)实现对输入信号的手动增益控制。
2.发挥部分(1)实现对输入信号的自动增益控制,要求输出信号幅度保持2VPP,AGC的动态范围不小于20dB。
(2)进一步提高AGC电路的动态范围,优化响应时间和幅度稳定度。
(3)其他功能,自由发挥二、实现原理和结果分析1.利用按键开关实现手动控制。
原理:先将DDS源发生的信号送入AD转换,转换后的值乘以增益k,然后输出到DA转换,最后用示波器显示。
原始信号频率为100k,根据奈奎斯特采样定理fs至少为200k才能保证恢复原始信号。
当然采样频率越高越好,(频率很高时,单周期内的样点数较多,不用插值恢复即可得到完美的波形)由于AD/DA芯片支持最高20M的采样率,这里我们采用12M的采样率,直接用系统48M时钟4分频得到,免去设计复杂的非整数分频的分频器。
得到8位采样数据后,应用寄存器将其保存。
同时将8位按键开关的输入值用寄存器保存。
将二者相乘输出到10位DA转换。
这里应当注意考虑溢出和可调节范围(即动态增益)的问题。
通过推算,参考电压Vref是4v,要求输入峰峰值电压Vpp是2v代码中,如下代码较为合适,兼顾增益和调节范围。
assign da_out=ad_reg_in*reg_key/16;实验结果:成功实现256梯度调节,但是调节过程较麻烦,而且不能做到连续调节。
下面讨论改进方案。
2. 利用旋钮实现连续控制看到实验板上有个旋钮,于是考虑用旋钮实现手动调节,更加方便实用。
其实该旋钮也是8位采样的AD,所以理论上可调精度与上述方法一样,但操作方便了许多。
涉及到TLC549的控制,该芯片是8位串行的AD 转换器,要用到有限状态机的编程,所以复杂度一下提高了很多。
(还好比赛前有学习准备,不然根本不可能做出来。
)串行的要一位一位的读入,每读入一位整体要向高位进1(左移1位),8位全部读完后方可读数。
芯片手册中要求采样时钟不要超过1.1M。
下简述实现原理,将48M时钟64分频得到0.75M,并以此时钟驱动一个5位状态计数器ctrl_cnt,另其中if ( ctrl_cnt == 5'd6 || ctrl_cnt == 5'd8 || ctrl_cnt == 5'd10|| ctrl_cnt == 5'd12 || ctrl_cnt == 5'd14 || ctrl_cnt == 5'd16|| ctrl_cnt == 5'd18 || ctrl_cnt == 5'd20 )时去读入一位数,频率为1.5M,满足芯片要求。
在ctrl_cnt==23时,8位数已满,刷出全部8位数。
考虑为芯片的准备时间,在1<ctrl_cnt<25时禁止读数(指采样结果8位数),其余时间可读。
其它部分与方案一中的实现相同,详见代码。
实验结果:成功实现手动连续调节,较容易将输出值调节到规定数值。
3. 自动增益控制原理:利用简单的反馈调节机制,也叫PID调节实现。
获取输出信号(一个周期内)的最大值,将其与目标值比较,若大于目标值,则减小增益系数k;若小于目标值,则增大增益系数k。
○0获得最大值用比较法,如if(Vmax<Vin) Vmax=Vin;○1获得最大值时必须获得单周期的最大值,否则只能单向增大的时才会将其调小,反之不行。
考虑采样频率12M和信号频率100k,可用7位计数器count,在1-120间累加,当值为120时计数器count置1同时根据Vmax与目标值的大小调节增益K,同时将Vmax置为中值(否则下一周期比较时当最大值小于当前值时将不会改变)。
置为中值的原因是,可以置为零值,但响应会变慢,由于半偏置电压的存在,在极端情况下(零输入)的值恰好为中值。
○3下面讨论溢出和偏置的影响:输入中值在128,输出中值在512,原始解决方法assign da_out=512+((ad_reg_in-128))*k;//当k值为4时恰好匹配到输出,这样随着k值得波动输出波形的波动很大,不稳定。
assign da_out=512+((ad_reg_in-128))*k/10; 当k值为40时恰好匹配到输出,这样随着k值得波动输出波形的波动不会很大,改善输出波形稳定度。
三、实验总结1.比赛的题目基本完成,并且利用了旋钮手动调节增益和功能自动增益控制,动态调节范围达到30dB。
经过本次比赛,我们充分熟悉了利用Verilog在FPGA开发的基本使用方法。
这更激励我们在将来的生活学习中,多动脑多动手,收获更多的知识果实。
2.在比赛过程中通过在线调试工具Signaltap查看各总线信号的值,为比赛的分析和参数选择提供了理论依据,这是个对信号进行捕捉观察的有力工具,无疑是顺利完成比赛的有力保证。
3.由于系统自学过Verilog语言,所以在比赛中利用语言实现要求有很大的优势,很轻松的完成一些比如乘法器,比较器,有限状态机等利用传统逻辑器件很难搭建的RTL。
但是语言利用不当也会造成致命的错误,很难发现,比如有符号数,无符号数,没有小数,溢出等问题,必须根据器件的特性来编写代码。
最后,感谢大赛的举办方和承办方,是你们的辛勤付出才给了我们这次体验学习的机会。
匡鑫2015年5月17日星期日五、实验源码1.按键调节module AGC1(input clk,input[7:0] ad_in,input[7:0] key_in,output ad_en,output ad_clk,output da_clk,output da_mode,output[9:0] da_out);/////////////////////////////////////////////////reg[7:0]ad_reg_in;reg clk_12M;reg[1:0] count4;reg[7:0] reg_key;////////////////////////////////////////////////assign ad_en=1'b0;assign da_out=ad_reg_in*reg_key/16;assign ad_clk=clk_12M;assign da_clk=clk_12M;assign da_mode=0;always@(key_in)beginreg_key<=key_in;endalways@(posedge clk)beginclk_1M<=(count4<4/2)?1'b1:1'b0;if(count4==4-1)//clock 12Mcount4<=0;elsecount4<=count4+1;endalways@(posedge clk_12M)beginad_reg_in<=ad_in;endendmodule2.旋钮调节module AGC(input clk,input [7:0] ad_in,input ad_ctl_in,output ad_en,output ad_clk,output da_clk,output da_mode,output[9:0] da_out,output ad_ctl_cs,output ad_ctl_clk,output[7:0] ad_ctl_out);/////////////////////////////////////////////////////// reg[7:0]ad_reg_in;reg clk_1M;reg[5:0] count4;///////////////////////////////////////////////////////assign ad_en=1'b0;assign da_out=ad_reg_in*ad_ctl_out/32;assign ad_clk=clk_1M;assign da_clk=clk_1M;assign da_mode=0;/////////////////////////////////////////////////////////调用旋钮AD输入模块ad_ctl ad(//input.sys_clk(clk), //system clock;系统时钟.sys_rst_n(1), //system reset, low is active;复位.AD_IO_DATA(ad_ctl_in), //输入的串行信号//output.AD_IO_CLK(ad_ctl_clk), //采样时钟.AD_CS(ad_ctl_cs), //ad片选.AD_out(ad_ctl_out) //ad采样输出);//4分频always@(posedge clk)beginclk_12M<=(count48<4/2)?1'b1:1'b0;if(count4==4-1)count4<=0;elsecount4<=count4+1;endalways@(posedge clk_12M)beginad_reg_in<=ad_in;endendmodule3. 旋钮AD采样模块module ad_ctl (//inputinput sys_clk , //system clock;系统时钟input sys_rst_n , //system reset, low is active;复位input AD_IO_DATA , //输入的串行信号//outputoutput reg AD_IO_CLK , //采样时钟output reg AD_CS , //ad片选output reg [7:0] AD_out);//Reg definereg [6:0] div_cnt ;//分频计数reg ad_clk ;reg [4:0] ctrl_cnt ;reg [7:0] ad_data_shift ;// counter used for div osc clk to ad ctrl clk 50M/64 = 0.78Mhzalways @(posedge sys_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)div_cnt <= 6'b0;elsediv_cnt <= div_cnt + 6'b1;end//gen ad_clkalways @(posedge sys_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)ad_clk <= 1'b0 ;else if ( div_cnt <= 6'd31 )ad_clk <= 1'b1 ;elsead_clk <= 1'b0 ;end// ad ctrl signal gen// ctrl_cnt 0 - 32is for ad ctrlalways @(posedge ad_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)ctrl_cnt <= 5'b0;elsectrl_cnt <= ctrl_cnt + 5'b1;endalways @(posedge ad_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)AD_IO_CLK <= 1'b0;else if ( ctrl_cnt == 5'd6 || ctrl_cnt == 5'd8 || ctrl_cnt == 5'd10 || ctrl_cnt == 5'd12 || ctrl_cnt == 5'd14 || ctrl_cnt == 5'd16|| ctrl_cnt == 5'd18 || ctrl_cnt == 5'd20 ) // ad clk low AD_IO_CLK <= 1'b1;elseAD_IO_CLK <= 1'b0;endalways @(posedge ad_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)AD_CS <= 1'b1;else if ( ctrl_cnt >= 5'd1 && ctrl_cnt <= 5'd25 ) // ad output csAD_CS <= 1'b0;elseAD_CS <= 1'b1;end// shift AD return analog DATA to ad_data_shift reg use AD_IO_CLK rising edge always @(posedge ad_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)ad_data_shift <= 8'b0;else if ( AD_CS == 1'b1 )ad_data_shift <= 8'b0;else if ( AD_IO_CLK == 1'b1 )ad_data_shift <= { ad_data_shift[6:0], AD_IO_DATA } ;else ;end//display AD sample data to AD_out when ad_data_shift is constanctalways @(posedge ad_clk or negedge sys_rst_n) beginif (sys_rst_n ==1'b0)AD_out <= 8'b0;else if ( ctrl_cnt == 5'd23 )AD_out <= ad_data_shift ;else ;endendmodule4.自动增益控制module AGC2(input clk,input[7:0] ad_in,output ad_en,output ad_clk,output da_clk,output da_mode,output[9:0] da_out);///////////////////////////////////////////////// reg[7:0]ad_reg_in;reg clk_1M;reg[5:0] count48;reg[9:0] reg_vmax;reg[8:0] k=100;reg[7:0] count;wire[9:0] ccc;//////////////////////////////////////////////// //assign k=16;assign ad_en=1'b0;assign da_out=512+((ad_reg_in-128))*k;//assign da_out=512+((ad_reg_in-128))*k;assign ad_clk=clk_1M;assign da_clk=clk_1M;assign da_mode=0;always@(posedge clk)beginclk_1M<=(count48<4/2)?1'b1:1'b0;if(count48==4-1)//clock 12Mcount48<=0;elsecount48<=count48+1;endalways@(posedge clk_1M)beginad_reg_in<=ad_in;endalways@(posedge clk_1M)begincount<=count+1'b1;if(reg_vmax<da_out)reg_vmax<=da_out;if(count>=120)begincount<=8'h00;if(reg_vmax<540)k<=k+1;if(reg_vmax>540)k<=k-1;reg_vmax<=512;endendendmodule。