草庐IT

秒表设计(Verilog)--quartus13

不吃折耳根 2023-09-08 原文

秒表设计(Verilog)–quartus13

本次实验的目的在于:
(1) 掌握利用硬件描述语言设计计数器、分频电路、译码电路的方法;
(2) 掌握利用例化语句设计顶层电路的方法。

实验内容

秒表设计:要求:
(1)数码管显示;
(2)能清零、暂停;
(3)精确到1/100秒。

实验设备

(1)DE2-115实验板一块
(2)高配置计算机一台

实验原理

电路框图

1、分频电路设计、编译;
设计方案:该模块有三个端口,分别是原始时钟输入端口、时钟清零信号输入端口、分频时钟输出端口。设置时钟清零信号为高电平时时钟清零,即输出的时钟为低电平。由于开发板提供的时钟信号频率为50MHz,而我们需要的为100Hz的时钟输入,所以分频系数k为:

设置一个计数器,当计数器计数小于k-1时,计数器加1,时钟输出为0;当计数器计数到k-1的时,计数器清零,时钟输出为1。

//分频
module fenpin(clk,clr,clk2);
input clk,clr;
output clk2;
reg clk2;
reg[31:0] cnter0;
always@(posedge clk or negedge clr)
if (~clr) 
     cnter0<=0;
else 
     if (cnter0==500000-1) 
       begin 
        cnter0<=0; clk2<=1'b1; 
        end
     else  
        begin 
         cnter0<=cnter0+1; clk2<=0;
         end
endmodule

2、模100、模60计数器设计、编译;
模100计数器设计方案:
该模块有五个端口:时钟输入端口,清零端口,个位计数输出端口,十位计数输出端口,进位端口。清零信号输入为低电平时计数器清零。在时钟高电平及清零端口输入为高电平时电路工作:模100计数器分为两个模10计数部分,中间用前一个模10的进位作为后一个模10计数器的时钟输入,后一个模10计数器的进位为输出的进位。这样设计是为了输出的计数端口可以直接连接到译码器译码。
波形仿真图:

//模100计数器
module counter100(clk,clr,qa,qb,co);
input clk,clr;
output[3:0] qa,qb;
output co;
reg[3:0] qa,qb;
reg cin,co;
always @(posedge clk or negedge clr) begin
if(~clr)
	begin
		qa<=0;
		cin<=0;
	end
	else  
		if(qa==9)
		begin
			qa<=0;
			cin<=1;
		end
		else
		begin
			qa<=qa+1;
			cin<=0;
		end
end
always @(posedge cin or negedge clr) begin
if(~clr)
	begin
		qb<=0;
		co<=0;
	end
	else 
		if(qb==9)
		begin
			qb<=0;
			co<=1;
		end
		else
		begin
			qb<=qb+1;
			co<=0;
		end
end
endmodule

3、模60计数器设计方案
模60设计方案与模100几乎一致,不同的是模60计数器没有最终的进位输出。
波形仿真图:

//模60计数器
module counter60(clk,clr,qa,qb);
input clk,clr;
output[3:0] qa,qb;
reg[3:0] qa,qb;
reg cin;
always @(posedge clk or negedge clr) begin
if(~clr)
	begin
		qa<=0;
		cin<=0;
	end
	else 
		if(qa==9)
		begin
			qa<=0;
			cin<=1;
		end
		else
		begin
			qa<=qa+1;
			cin<=0;
		end
end
always @(posedge cin or negedge clr) begin
if(~clr)
	begin
		qb<=0;
	end
	else 
		if(qb==5)
		begin
			qb<=0;
		end
		else
		begin
			qb<=qb+1;
		end
end
endmodule

4、七段译码器电路设计、编译;
该模块有两个端口:需要译码的输入端口和译码输出端口。输入信号后将输入的信号通过比对输出对应的译码。但是需要注意的是我们使用的开发板七段数码管是共阳极的。
波形仿真图:

//七段译码器
module decoder7(in,out);
input[3:0] in;
output[6:0] out;
wire[3:0] in;
reg [6:0] out;
always@(in,out)
begin
	case (in)
		4'd0:out=7'b1000000;
		4'd1:out=7'b1111001;
		4'd2:out=7'b0100100;
		4'd3:out=7'b0110000;
		4'd4:out=7'b0011001;
		4'd5:out=7'b0010010;
		4'd6:out=7'b0000011;
		4'd7:out=7'b1111000;
		4'd8:out=7'b0000000;
		4'd9:out=7'b0011000;
		default: out=7'b1000000;
	endcase
end
endmodule
4、	分频代码
module fenpin(clk,clr,clk2);
input clk,clr;
output clk2;
reg clk2;
reg[31:0] cnter0;
always@(posedge clk or negedge clr)
if (~clr) 
     cnter0<=0;
else 
     if (cnter0==500000-1) 
       begin 
        cnter0<=0; clk2<=1'b1; 
        end
     else  
        begin 
         cnter0<=cnter0+1; clk2<=0;
         end
endmodule

5、顶层电路设计、编译,分配管脚、下载、测试。
顶层文件主要是使用例化语句调用上面写好的模块,然后通过wire类型的变量来把电路所有的模块级联起来。采用的程序测试层次及模块如下图所示:

//秒表
module seconds(CLOCK_50,SW,HEX0,HEX1,HEX2,HEX3);
input CLOCK_50;
input[1:0] SW;
output[6:0] HEX0,HEX1,HEX2,HEX3;
wire [6:0] HEX0,HEX1,HEX2,HEX3;
wire clk1,co;
wire[3:0] qa,qb,qc,qd;
fenpin fp(.clk(CLOCK_50),.clr(SW[0]),.clk2(clk1));
counter100 ct100(.clk(clk1),.clr(SW[1]),.qa(qa),.qb(qb),.co(co));
counter60 ct60(.clk(co),.clr(SW[1]),.qa(qc),.qb(qd));
decoder7 dc0(.in(qa),.out(HEX0));
decoder7 dc1(.in(qb),.out(HEX1));
decoder7 dc2(.in(qc),.out(HEX2));
decoder7 dc3(.in(qd),.out(HEX3));
endmodule

思考

如何设计暂停功能?简述原理
设计暂停功能的方法主要有两种。第一种是让计数器使能端置0从而使计数器不工作,所以也就达到了暂停功能。第二种是通过阻断时钟输入从而让计数器不工作从而实现暂停功能。我在本次实验中采用的是通过将输入时钟清零从而实现暂停功能的方法。

总结

1、使用连续赋值语句assign时等号左边的变量有类型要求,这个变量只能是wire类型的,如果定义为reg类型的变量就会出现错误。
2、在将程序烧录到开发板上运行时数码管的显示不正确,其具体情况是:可以明显的看到秒的个位在后两位变化一定时间后改变一次,秒的个位改变十次后秒的十位改变一次,但是数码管上不会有正常的数字显示。最后通过调试发现我们使用的开发板上的数码管和我平时接触到的数码管不太一致。第一个不一致的部分是这个数码管是共阳极显示的数码管,需要我们给到低电平时数码管才亮。第二个不一致的部分时这个数码管虽然也是工具{a,b,c,d,e,f,g}的顺序控制七段LED显示的,但是在数码管上体现的位置有所区别,其具体顺序如下图显示:

有关秒表设计(Verilog)--quartus13的更多相关文章

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

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

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

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

  3. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

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

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

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

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

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

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

  7. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  8. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

  9. ruby-on-rails - Rails 5,公寓和设计 : sign in with subdomains are not working - 2

    我已经使用Apartment设置了一个Rails5应用程序(1.2.0)和Devise(4.2.0)。由于某些DDNS问题,应用只能在app.myapp.com下访问(请注意子域app)。myapp.com重定向到app.myapp.com。我的用例是每个注册该应用的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据。用户不应限定在其子域内。基本上应该可以从任何子域登录。重定向到租户的正确子域由ApplicationController处理。根据Devise标准,登录页面位于app.myapp.com/users/sign_in。这就是问题开始的

  10. ruby-on-rails - 设计中的 ArgumentError::RegistrationsController#new 错误的参数数量(2 代表 0..1) - 2

    我在关注RyanbatesRailsCast的devise和omniauth(第235集-devise-and-omniauth-revised)。当我尝试使用Twitter登录时,标题中不断出现错误。defself.new_with_session(params,session)ifsession["devise.user_attributes"]new(session["devise.user_attributes"],without_protection:true)do|user|user.attributes=paramsuser.valid?end完整跟踪:C:/Ruby20

随机推荐