- 浏览: 550894 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (344)
- ··············未分类············· (33)
- Eclipse 插件 (15)
- EDA 工具 (1)
- Linux/Unix (3)
- Java (43)
- Java Applet (1)
- Java Draw2d (22)
- Java Draw2d version2 (6)
- Java GEF (2)
- Java SWT (21)
- Java SWT Image 图像 (21)
- Java SWT Tree (16)
- Java SWT Table (4)
- Java SWT TableViewer (11)
- Java SWTbot (4)
- Java Test (2)
- Java Thread 多线程 (22)
- Java Zest (5)
- RC2_3S400学习笔记 (16)
- tcl 脚本 (10)
- Verilog (7)
- XML (6)
- 国家 (5)
- 感叹 (4)
- 面试题 (9)
- 生活 (36)
- 足球 世界杯 (8)
- 老公看你的 (3)
- web开发 (1)
- 数据结构——图 (7)
- c language (1)
最新评论
-
zxjlwt:
路过素人派http://surenpi.com
SWT 树的事件 SWT.Selection SWT.CHECK SWT.DefaultSelection -
hj01kkk:
1楼用法正解
JDK 7 中的 Fork/Join 模式 -
fish_no7:
使用 new SortTask().fork()
JDK 7 中的 Fork/Join 模式 -
wpf523:
mark
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数 -
uniquejava:
以前碰到过,估计是在icu包中实现了双击自动选中一段文本的功能 ...
java.lang.NoClassDefFoundError: com/ibm/icu/text/BreakIterator
实验内容
本次实验要设计一个计数器,并在数码管上面显示计数器的计数过程。
根据实验要求,程序大体可分为三个部分:分频部分,计数部分, 显示部分。
由于开发板提供的时钟频率是50MHz,人眼睛没法达到这个速度,四个数码管也
不好显示这么高频率计数后得到的巨大数字,所以要先对50MHz进行分频,这样才能
保证计数器每计一个数的周期在一秒左右。
计数部分由多个寄存器构成,每个时钟的上升沿,寄存器里面的数值就加一,计数
器复位数值是0000,当计满到9999的时候,计数器返回0000状态,重新开始计数。
module counter(clk,rst_n, seg_en0, seg_en1, seg_en2, seg_en3, data0, data1, data2, data3, data4, data5, data6, data7 ); input clk,rst_n ; output seg_en0,seg_en1,seg_en2,seg_en3 ; output data0,data1,data2,data3 ; output data4,data5,data6,data7 ; reg seg_en0,seg_en1,seg_en2,seg_en3 ; reg [24:0 ] clk_cnt ; reg [3 :0 ] cnt0,cnt1,cnt2,cnt3 ; reg [7 :0 ] data_out ; reg [3 :0 ] state ; wire data0,data1,data2,data3 ; wire data4,data5,data6,data7 ; wire data_en0,data_en1,data_en2,data_en3; wire clk_24,clk_15 ; wire cntin0 = 4'b0000 ; wire cntin1 = 4'b0000 ; wire cntin2 = 4'b0000 ; wire cntin3 = 4'b0000 ; parameter SHOW0 = 4'b0001 , SHOW1 = 4'b0010 , SHOW2 = 4'b0100 , SHOW3 = 4'b1000 ; function [7 :0 ] translater3_8 ; input [3 :0 ] cnt ; begin case ( cnt ) 4'b0000: translater3_8 = 8'b1111_1100 ; 4'b0001: translater3_8 = 8'b0110_0000 ; 4'b0010: translater3_8 = 8'b1101_1010 ; 4'b0011: translater3_8 = 8'b1111_0010 ; 4'b0100: translater3_8 = 8'b0110_0110 ; 4'b0101: translater3_8 = 8'b1011_0110 ; 4'b0110: translater3_8 = 8'b1011_1110 ; 4'b0111: translater3_8 = 8'b1110_0000 ; 4'b1000: translater3_8 = 8'b1111_1110 ; 4'b1001: translater3_8 = 8'b1111_0110 ; endcase end endfunction always @ ( posedge clk or negedge rst_n ) if( !rst_n ) begin clk_cnt <= 25'b0_0000_0000_0000_0000_0000_0000 ; end else begin clk_cnt <= clk_cnt + 25'b0_0000_0000_0000_0000_0000_0001 ; end assign clk_24 = clk_cnt[21] ; assign clk_15 = clk_cnt[14] ; always @ ( posedge clk_24 or negedge rst_n ) if( !rst_n ) begin cnt0 <= cntin0 ; cnt1 <= cntin1 ; cnt2 <= cntin2 ; cnt3 <= cntin3 ; end else begin if( (4'b1001 == cnt3) && (4'b1001 == cnt2) && (4'b1001 == cnt1) && (4'b1001 == cnt0) ) begin cnt0 <= 4'b0000 ; cnt1 <= 4'b0000 ; cnt2 <= 4'b0000 ; cnt3 <= 4'b0000 ; end else begin if( (4'b1001 == cnt2) && (4'b1001 == cnt1) && (4'b1001 == cnt0) ) begin cnt0 <= 4'b0000 ; cnt1 <= 4'b0000 ; cnt2 <= 4'b0000 ; cnt3 <= cnt3 + 4'b0001 ; end else begin if( (4'b1001 == cnt1) && (4'b1001 == cnt0) ) begin cnt0 <= 4'b0000 ; cnt1 <= 4'b0000 ; cnt2 <= cnt2 + 4'b0001 ; cnt3 <= cnt3 ; end else begin if( 4'b1001 == cnt0 ) begin cnt0 <= 4'b0000 ; cnt1 <= cnt1 + 4'b0001 ; cnt2 <= cnt2 ; cnt3 <= cnt3 ; end else begin cnt0 <= cnt0 + 4'b0001 ; cnt1 <= cnt1 ; cnt2 <= cnt2 ; cnt3 <= cnt3 ; end end end end end assign data_en0 = (cnt0||cnt1||cnt2||cnt3) ? 1'b1 : 1'b0 ; assign data_en1 = (cnt1||cnt2||cnt3) ? 1'b1 : 1'b0 ; assign data_en2 = (cnt2||cnt3) ? 1'b1 : 1'b0 ; assign data_en3 = (cnt3) ? 1'b1 : 1'b0 ; //assign data_en0 = cnt0 ? 1'b0 : 1'b1 ; //assign data_en1 = cnt1 ? 1'b0 : 1'b1 ; //assign data_en2 = cnt2 ? 1'b0 : 1'b1 ; //assign data_en3 = cnt3 ? 1'b0 : 1'b1 ; always @ ( posedge clk_15 or negedge rst_n ) if( !rst_n ) begin state <= SHOW0 ; seg_en0 <= 1'b0 ; seg_en1 <= 1'b0 ; seg_en2 <= 1'b0 ; seg_en3 <= 1'b0 ; data_out <= 8'b0000_0000 ; end else begin case( state ) SHOW0: begin seg_en0 <= data_en0 ; seg_en1 <= 1'b0 ; seg_en2 <= 1'b0 ; seg_en3 <= 1'b0 ; data_out[7:0] <= translater3_8(cnt0) ; state <= SHOW1 ; end SHOW1: begin seg_en0 <= 1'b0 ; seg_en1 <= data_en1 ; seg_en2 <= 1'b0 ; seg_en3 <= 1'b0 ; data_out[7:0] <= translater3_8(cnt1) ; state <= SHOW2 ; end SHOW2: begin seg_en0 <= 1'b0 ; seg_en1 <= 1'b0 ; seg_en2 <= data_en2 ; seg_en3 <= 1'b0 ; data_out[7:0] <= translater3_8(cnt2) ; state <= SHOW3 ; end SHOW3: begin seg_en0 <= 1'b0 ; seg_en1 <= 1'b0 ; seg_en2 <= 1'b0 ; seg_en3 <= data_en3 ; data_out[7:0] <= translater3_8(cnt3) ; state <= SHOW0 ; end default: state <= SHOW0 ; endcase end assign data0 = data_out[0] ; assign data1 = data_out[1] ; assign data2 = data_out[2] ; assign data3 = data_out[3] ; assign data4 = data_out[4] ; assign data5 = data_out[5] ; assign data6 = data_out[6] ; assign data7 = data_out[7] ; endmodule /* module test; reg clk,rst_n ; wire seg_en0,seg_en1,seg_en2,seg_en3 ; wire data0,data1,data2,data3 ; wire data4,data5,data6,data7 ; initial begin clk = 0 ; rst_n = 1 ; #10 rst_n = 0 ; #10 rst_n = 1 ; #100000000 $stop; end always #5 clk = ~clk ; counter cc_coun(.clk(clk),.rst_n(rst_n), .seg_en0(seg_en0), .seg_en1(seg_en1), .seg_en2(seg_en2), .seg_en3(seg_en3), .data0(data0), .data1(data1), .data2(data2), .data3(data3), .data4(data4), .data5(data5), .data6(data6), .data7(data7) ); endmodule */
发表评论
-
学习笔记
2010-06-30 19:26 866学习“红色飓风2笔记”1,ISE中也可以完成仿真啊,参见3s4 ... -
ISE中下载程序出错,msk文件缺失问题
2010-06-29 19:42 1863原文:http://cathyun.spaces.live.c ... -
FPGA通过JTAG下载程序出现“Programming terminated. DONE did not go high.”问题的解决方法
2010-06-29 18:37 3100原文:http://blog.csdn.net/wjabcjw ... -
实验十三 I2C总线协议控制器实验
2010-06-29 15:15 919看不到效果 -
实验十二 USB接口读写控制实验
2010-06-29 15:14 1022没完成 -
实验十一 PS2接口控制与显示实验
2010-06-29 14:15 889实验原理 本次实验要编写一个能实现PS/2端口功能的程序。P ... -
实验十 串口通信实验
2010-06-29 13:40 936实验结果 下载完毕后,用开发包中提供的串口超级终端,设置波特 ... -
试验九 VGA显示控制实验
2010-06-29 13:08 876没有买这个扩展板,是不是不好做这个试验了。 1,可以了解VG ... -
实验八 LCD显示控制实验
2010-06-29 13:04 1998实验原理 1、1602 液晶显示简介: 液晶屏幕分为点阵型 ... -
实验七 蜂鸣器控制实验
2010-06-29 12:55 1331实验原理 与利用微处 ... -
实验六 按键防抖动实验
2010-06-29 12:46 2344实验原理 若要使用开发板上面的四个SW按键来做计数输入,就需 ... -
试验四 数码管控制实验
2010-06-29 12:29 12201,循环显示1-F。 module Seven_LED( ... -
试验三 状态机应用实验
2010-06-29 12:17 1477实验原理 状态机设计 ... -
试验二 分频器实验
2010-06-29 12:06 1221试验原理: 经过处理后得到的时钟频率比输入的时钟频率慢的情况 ... -
试验一 LED控制实验
2010-06-29 10:56 1163刚买了一个红色飓风二代的板子抓紧时间学习哈。 实验内容: ...
相关推荐
实验目的 1.学会8253芯片和微机接口的原理和方法。 2.掌握8253定时器/计数器的工作方式和编程原理。 实验环境 系统平台:Windows XP 编译环境:启东试验教学平台
51/52单片机计数器实验程序 试验箱专用程序
1. 试验原理 本实验原理图如图示,8253A的A0、A1接系统地址总线A0、A1,故8253A 有四个端口地址,端口地址如表3-2所示。8253A的片选地址为40H~ 4FH。 因此, 本实验仪中的8253A四个端口地址为40H、41H、42H、43H,...
这个文档主要是昨晚EDA试验之后锁写的实验报告 ,希望可以帮到大家 呵呵
实验九 脉冲计数 (定时/计数器实验) 17 实验十 电脑时钟(定时器、中断综合实验) 18 第四章 硬件实验 19 实验一 P3.3 口输入 P1 口输出 19 实验二 工业顺序控制 21 实验三 8255 控制交通灯 24 ...
2 设计思路 本实验利用单片机的定时器/计数器定时和计数的原理,通过采用仿真软件来模拟实 现。模拟利用AT89C2052单片机、LED数码管以及各种控制器件来控制表的计数以及计数 的开启/暂停/继续与复位等。利用单片机...
2-87 二-五-十进制异步计数器74LS290 2-88 用置零法将74LS160接成6进制计数器 2-89 2-88电路的改进 2-90 用置数法将74LS160接成6进制计数器(1) 2-91 用置数法将74LS160接成6进制计数器(2) 2-92 用两片74LS...
五、实验五 基本控制指令编程实验…………………………………………………………25 六、实验六 算术运算和数据处理指令编程实验……………………………………………31 七、实验七 应用功能指令编程实验…………...
基于单片机的ASM编程,有跑马灯,中断计数器,存储扩展读写等试验的源码和实验报告。
对试验箱的按键定时器 按下加一 按下数字多少就是多少
实验03_可编程定时器计数器8253 实验04_可编程并行接口(8255方式0,1) 实验05_七段数码管 实验06_继电器控制 实验07_竞赛抢答器 实验08_交通灯控制实验 实验09_Windows中断C 实验11_数模转换器 实验12_模数转换器 ...
vhdl试验(全加器、频率计、计数器、优先编码器、触发器、状态机、数据选择器、数码管扫描)
实验五 存储器扩展使用 1. 利用试验箱中的器件,给单片机扩展一片随机读写存储器 2. 确定扩展的存储器的地址范围 3. 编写程序,将扩展的存储器中填写内容,每个单元中填写其地址码低8位的“非值” 4. 验证扩展存储器...
试验题目:Session Bean组件的开发与应用。 试验目的:通过对简单会话Bean组件的编写,加深对EJB理论知识的理解,为更深层的EJB应用做准备。...在实验报告中,记录关键性的java代码、xml代码和测试结果。 试验步骤:
EDA实验全部程序 交通灯 模可变计数器 一位全加器 序列发生器和检测器
单片机实验讲义(89c52芯片资料介绍 电子钟程序 简易计算器制作 语言报数计数器温度控制器的设 )
接口技术实验2_8253定时计数实验用8253计数器0、1实现周期性负脉冲与方波脉冲输出
1.实验任务 用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,...
1、选择器、比较器及测试电路 2、LED 计数电路,LED 计数测试电路 3、5 输入编码器,改进 LED 计数测试电路 ...6、4/16 位 D 寄存器,BCD 计数器,4 位码表计数器 7、小型数字系统运动码表电路(选做)
实现两位十进制数的加计数和减计数,依此类推,可实现n位数的计数