当前位置: 首页 > news >正文

唐山地方志网站建设长沙公司网站建设

唐山地方志网站建设,长沙公司网站建设,中国专业做鞋子的网站,wordpress编辑图像文章目录 前言实验手册一、实验目的二、实验原理1#xff0e;理论原理2#xff0e;硬件原理 三、系统架构设计四、模块说明1#xff0e;模块端口信号列表dig_driver(数码管驱动模块)key(按键消抖模块)top(顶层模块) 2#xff0e;状态转移图3#xff0e;时序图五、仿真波形… 文章目录 前言实验手册一、实验目的二、实验原理1理论原理2硬件原理 三、系统架构设计四、模块说明1模块端口信号列表dig_driver(数码管驱动模块)key(按键消抖模块)top(顶层模块) 2状态转移图3时序图五、仿真波形图仿真代码 六、代码编写dig_driver(数码管驱动模块)key(按键消抖模块)top(顶层模块) 七、引脚分配八、板级验证效果拍照或录制视频 前言 利用动态数码管的原理对秒表计时器的实现 实验手册 一、实验目的 用按键控制秒表的启动、停止和重置 2.用两个数码管显示秒表的分 用两个数码管显示秒表的秒 用两个数码管显示秒表的毫秒的百位和十位数值。 二、实验原理 1理论原理 在数码管中由于有位选信号和段选信号的存在我们无法做到将数码管同时进行变换所以我们通过快速的切换和刷新使得我们看到的是连续的多个数码管显示结果。通过控制位选信号和段选信号可以实现不同的数字、字母或符号的动态显示。 用已经消抖的按键控制秒表计数器的停止、启动、复位。 2硬件原理 开发板上的数码管数码管位选和段选信号都是低电平有效。 位选信号根据需要的显示位数进行生成该实验所用的开发板可用6个位选信号它们用于选择要显示的数码管。 段选信号根据需要的显示内容进行生成它们用于控制数码管的七段LED灯以及小数点LED灯的亮灭状态该实验所用的开发板可用8个段选信号。 三、系统架构设计 由于数码管无法同时改变状态我在此处采用了0.1ms的计数器对数码管进行刷新人眼不会察觉到闪烁。 在取seg的值时我采用了两个计数器一个是作为数码管的最小数值10ms一个是最大数值60min然后对60min计数器中的计数值取余、取整分离出分、秒、毫秒的个位和十位。 我还设置两个按键控制该秒表的启动、停止、以及复位按键1控制启动再次按下则停止按键4控制秒表复位。 四、模块说明 1模块端口信号列表 dig_driver(数码管驱动模块) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwire[1:0]key_in消抖后稳定按键信号outputreg[5:0]sel6位位选信号outputreg[7:0]seg8位段选信号 key(按键消抖模块) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwire[1:0]key_in2位输入按键信号outputregkey_out输出稳定按键信号 top(顶层模块) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwire[1:0]key_in2位输入按键信号outputreg[5:0]sel6位位选信号outputreg[7:0]seg8位段选信号 2状态转移图 无 3时序图 五、仿真波形图 仿真代码 timescale 1ns/1ns define CYCLE 20 module tb ( );//激励信号/* input */ reg clk ;/* input */ reg rst_n ;/* input */ reg [3:0] key_in ; //响应信号/* output */ wire [7:0] seg ; //段选信号/* output */ wire [5:0] sel ; //位选信号 //重定义参数defparam top.u_dig_driver.MAX_10ms 5,top.u_dig_driver.MAX_0_1ms 1,top.u_dig_driver.MAX_60min 36000,top.u_key.CNT_MAX 1,top.u_dig_driver.sec_unit 600,top.u_dig_driver.ms_unit 10;//时钟信号always #(CYCLE/2) clk ~clk; //激励开始initial beginclk 1b0;rst_n 1b0;key_in 4b1111;#3rst_n 1b1;#10key_in 4b1110;#(CYCLE*100)key_in 4b1111;#(top.u_dig_driver.MAX_60min*CYCLE)key_in 4b1110;#(CYCLE*100)key_in 4b1111;#(top.u_dig_driver.MAX_60min/2)key_in 4b1111;#(CYCLE)key_in 4b0111;#(CYCLE*100)key_in 4b1111;#(CYCLE*100)$stop(2);end//实例化toptop (/* input */ .clk (clk ) ,/* input */ .rst_n(rst_n) ,/* output reg [7:0] */ .seg (seg ) , //段选信号/* output reg [5:0] */ .sel (sel ) //位选信号 );endmodule在这个仿真波形图中我们可以看到位选信号在我设置的频率中不停来回切换在切换中计数器10ms每计数一次前两位位选信号加一直到加到第二位位选信号9为止而中间两位的位选信号则是加到第四位位选信号6为止与预期效果一致。 六、代码编写 dig_driver(数码管驱动模块) module dig_driver (input clk ,input rst_n ,input [3:0] key_out ,output reg [7:0] seg , //段选信号output reg [5:0] sel //位选信号 ); wire [10:0] min; wire [10:0] sec; wire [10:0] ms ;parameter MAX_10ms 32d499_999; reg [31:0] cnt_10ms; wire add_10ms; wire end_10ms;parameter MAX_0_1ms 32d4_999; reg [31:0] cnt_0_1ms;parameter MAX_60min 32d359_999; reg [31:0] cnt_60min;parameter sec_unit 10d6000,ms_unit 10d100;reg [4:0] seg_value;//seg的状态寄存器 parameter ZERO 8b1100_0000 ,ONE 8b1111_1001 ,TWO 8b1010_0100 ,THREE 8b1011_0000 ,FOUR 8b1001_1001 ,FIVE 8b1001_0010 ,SIX 8b1000_0010 ,SEVEN 8b1111_1000 ,EIGHT 8b1000_0000 ,NINE 8b1001_0000 ;//parameter sel_0 6b111110, // sel_1 6b111101, // sel_2 6b111011, // sel_3 6b110111, // sel_4 6b101111, // sel_5 6b011111;//1ms计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_10ms 1d0;endelse if (cnt_10ms MAX_10ms) begincnt_10ms 1d0;endelse if (key_out[0]) begincnt_10ms cnt_10ms 1;endelse if (key_out[1]) begincnt_10ms cnt_10ms ;end end assign add_10ms 1b1; assign end_10ms cnt_10ms MAX_10ms;//60min计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_60min 1d0;endelse if (end_10ms) begincnt_60min cnt_60min 1;endelse if (cnt_60min MAX_60min) begincnt_60min 1d0;endelse begincnt_60min cnt_60min;end end //对计数值进行除和取余获得相应的值 assign min cnt_60min/sec_unit; assign sec cnt_60min%sec_unit/ms_unit; assign ms cnt_60min%sec_unit%ms_unit; //0.1ms计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_0_1ms 1d0;endelse if (cnt_0_1ms MAX_0_1ms) begincnt_0_1ms 1d0;endelse begincnt_0_1ms cnt_0_1ms 1;end end //该板块无法同时变化只能依次闪烁该方法为依次闪烁的间隔人肉眼无法判断 0.1ms always (posedge clk or negedge rst_n) beginif (!rst_n) beginsel 6b011_111;endelse if (cnt_0_1ms MAX_0_1ms) beginsel {sel[0],sel[5:1]};endelse beginsel sel ;end end//每位位选信号的段选信号的值 always (posedge clk or negedge rst_n) beginif (!rst_n) beginseg_value 5d0;endcase (sel) 6b011111: seg_value ms%10;6b101111: seg_value ms/10;6b110111: seg_value sec%10;6b111011: seg_value sec/10;6b111101: seg_value min%10;6b111110: seg_value min/10; default: seg_value 5d0;endcase end//根据seg_value显示数码管 always (posedge clk or negedge rst_n) beginif (!rst_n) beginseg 8b11111111;endcase (seg_value)5d0:begin seg ZERO ; end5d1:begin seg ONE ; end5d2:begin seg TWO ; end5d3:begin seg THREE ; end5d4:begin seg FOUR ; end5d5:begin seg FIVE ; end5d6:begin seg SIX ; end5d7:begin seg SEVEN ; end5d8:begin seg EIGHT ; end5d9:begin seg NINE ; enddefault: seg seg; endcase end endmodulekey(按键消抖模块) module key (input wire clk,input wire rst_n,input wire key_in,output reg key_out );parameter CNT_MAX 20d999_999; //20ms计数reg [19:0] cnt_20ms; reg key_flag; //20ms消抖 always(posedge clk or negedge rst_n)if(!rst_n)cnt_20ms20b0;else if(key_in1b1)cnt_20ms20d0;else if(cnt_20msCNT_MAX)cnt_20msCNT_MAX;elsecnt_20mscnt_20ms20d1; //取单个脉冲信号 always(posedge clk or negedge rst_n)if(!rst_n)key_flag1b0;else if(cnt_20ms(CNT_MAX-20d1))key_flag1b1;elsekey_flag1b0; //有效信号 always (posedge clk or negedge rst_n)beginif(!rst_n)beginkey_out 1b0;endelse if(key_flag 1b1)key_out ~key_out;elsekey_out key_out; endendmoduletop(顶层模块) module top (input clk,input rst_n,input [3:0] key_in,output [7:0] seg , //段选信号output [5:0] sel //位选信号 );wire [3:0]key_flag;wire [3:0]key_out ;key u_key//key_fsm (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[0]) , /* output reg */ .key_out (key_out[0]) );key u_key1 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[1]) , /* output reg */ .key_out (key_out[1]) );key u_key2 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[2]) , /* output reg */ .key_out (key_out[2]) );key u_key3 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[3]) , /* output reg */ .key_out (key_out[3]) ); dig_driver u_dig_driver (/* input */ .clk (clk ) ,/* input */ .rst_n (rst_n ) ,/* input [3:0] */ .key_out (key_out) ,/* output reg [7:0] */ .seg (seg) , //段选信号/* output reg [5:0] */ .sel (sel) //位选信号 );endmodule七、引脚分配 八、板级验证效果拍照或录制视频
http://www.zqtcl.cn/news/421144/

相关文章:

  • wordpress关闭网站吗用织梦做的学校网站
  • 响应式网站建设平台东莞网站建设aj
  • 代码做网站的软件市场营销策划书
  • 东莞网站建设 手机壳文登建设局网站
  • 网站建设和后台空间管理关系企业网络需求分析
  • 做小说网站做国外域名还是国内的好温州市网站建设
  • wordpress识别手机跳转网站3d视频动画制作
  • 展示型企业网站设计方案邯郸市口碑网络技术有限公司
  • 网站配色案例泰州seo平台
  • wordpress标题title优化代码seo技术顾问
  • 怎么做直播网站的超管延安免费做网站
  • 织梦做手机网站hao123从网上开始
  • 网站制作公司十强重庆网站建设mlfart
  • 南京调查公司网站杭州一起做网站
  • 不关站备案wordpress内网网站模板
  • 做学术用的网站如果在各大网站做免费的网络推广
  • 设计素材网站线上网站数据报表
  • 做一个小型网站多少钱wordpress 手机商城模板
  • 谷歌网站收录提交金山网站建设关键词排名
  • 域名备案中网站可以开通个人网站开发多少钱
  • 西安维护网站广州公司网站设计制作
  • 荆门做网站网络推广公司多久能回本
  • 搜索网站存在的关键字室内设计公司排名榜
  • 响应式网页开发昆明网站排名优化公司哪家好
  • 如东建设局网站线上购物平台
  • 重庆网站推广营销淘宝的网站怎么做的好
  • 重庆企业建站模板珠海企业官网设计制作
  • 网页作图软件东莞优化哪家好
  • 专业的商城网站开发深圳网站界面设计
  • 做网站需要自备服务器吗专业生产车间设计图纸网站