jjzjj

彩灯控制电路的设计

乾行lovemn 2023-10-01 原文

通过Verilog HDL语言使用Quartus II软件编写一个彩灯控制电路的设计

1  系统设计

1.1 设计要求

1.1.1 设计任务   

设计并制作彩灯控制电路。

1.1.2 性能指标要求  

① 用EDA实训仪的I/O设备和PLD芯片实现彩灯控制电路的设计。

② 彩灯控制电路具有1只复位按钮,当按钮按下后开始彩灯控制电路的工作。

③ 彩灯控制电路至少有4种以上的控制模式,如左移、右移、循环移位等,彩灯控制电路开始工作后,各工作模式能自动倒换。

④ 用EDA实训仪上的12只发光数码管(LED)显示彩灯控制电路的工作模式。

1.2 设计思路及设计框图

1.2.1设计思路

首先用Verilog HDL语言编写20M晶振分频器的程序和彩灯控制电路的主程序进行编译、仿真成功后,分别将它们生成图标,然后进入原理图的编辑方式,将分频器的输出作为彩灯控制电路的时钟输入,同时将各原件符号接上输出、输入端口,最后锁定管脚,完成下载验证过程。

1.2.2总体设计框图

彩灯原理图

2  各个模块程序的设计

  1. 设计一个分频器进行20MHz分频得到实训所需的1Hz的频率:

如图,将提供的频率为20MHZ的时钟转换成频率1HZ的时钟,然后输给到有需要的端口,触发下一个模块。

2彩灯控制

如图,clk是时钟输入端,上升沿有效,A控制彩灯亮灭的进行,s1,s2控制彩灯左移、右移、循环移位等,clrn是异步清除输入端,高电平清零,led[11..0]为彩灯的输出。

   3  调试过程

为了控制LED灯闪烁的频率所以加入了分屏器,总共分成了两个模块,开始时忘记设顶层文件,导致仿真出错,编译时,由于模块的问题,导致编译结果出错,在自己的反复检查下,改正,之后锁好管脚,然后下载到实验箱,按照自己所写的程序操作,通过拨动开关进行观察是否与程序编程相同。

4  功能测试

4.1 测试仪器与设备

(1)计算机:1台。

(2)EDA实训仪:1台。

4.2 性能指标测试

Clrn为复位开关,待高电频到来执行复位功能。A为暂停功能,待高电频到来执行暂停操作,当S1=0,S2=0时:执行六灯循环闪烁功能;当S1=0,S2=1时:执行全部闪烁功能;当S1=1,S2=0时:执行右循环功能;当S1=1,S2=1时:执行左循环功能。

4.3 误差分析

因为时钟信号存在延迟,仿真结果并不与时钟信号一一对应

5  实训心得体会

        EDA实训到此也结束了,我对Quartus II软件的各项操作有了更深的了解,也让我更加了解了这门课在现实生活中的应用。这次EDA实训让我感觉收获颇多,在这一-周的实训中我们不仅巩固了以前学过的知识,而且还学到了怎样运用E D A设计彩灯亮灭的整个过程和思路,更加强了我们动手能力,同时也提高了我们的思考能力的锻炼,我们在写程序的同时还要学会要改程序,根据错误的地方去修改程序。本文基于Verilog HDL的彩灯控制电路的设计,现代的关于电的东西或多或少都与EDA有关,我选择彩灯控制电路设计是因为对彩灯的左移、右移的实验很感兴趣,所以就选了这个题目,结合之前作业的一些程序,在原来的基础上加上一些创新程序做出了这个彩灯实训。在制作的过程中还是出了很多问题,尤其是在编译时总是出现问题,在自己反复修改后,终于完成了编译。总之这次实训学到了很多东西,加深了我对Quartus II软件的了解。

6  参考文献

  [1] EDA技术与应用(第五版),潘松,黄继业,潘明编著。北京:科学出版社

7 附录

附录1:仿真波形图(部分模块)

附录2:程序清单

1.分屏器

module fpq(clk,q);

input clk;

output reg q;

reg[24:0]count;

always@(posedge clk)

begin

count=count+1;

if (count==10000000) q=1;

else if (count==20000000)

begin

q=0;

count=0;

end

end

endmodule
  1. 彩灯程序
module z1(clk,A,s1,s2,led,clrn);

input clk,A,clrn;

input s1,s2;

output reg[11:0] led;       

reg q_temp;

reg c;

always @(posedge clk)     

begin

 if(clrn) led='b000000000000;

 else

if(A==0)

begin

  case({s1,s2})          

   'b00:begin

       c=c+'b1;

       if(c=='b1)

       led='b111111000000;

       else

       led='b000000111111;    

       end                      

    'b01:begin

       c=c+'b1;

       if(c=='b1)

       led='b000000000000;

       else

       led='b111111111111;    

       end                    



    'b10:begin

       q_temp=led[0];

       led=led>>1;

       led[11]=q_temp;

       end                  

    'b11:begin

       q_temp=led[11];

       led=led<<1;

       led[0]=q_temp;

       end                             

   endcase         

  end

 end

endmodule

有关彩灯控制电路的设计的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  5. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  6. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  9. ruby-on-rails - 在 Rails 控制台中使用 asset_path - 2

    在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O

  10. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

随机推荐