nexys4ddr数码管动态扫描Verilog例程
题目:实现数码管动态扫描功能,将十六个开关的值以十六进制的方式在4个数码管上同时显示出来。
`timescale 1ns / 1ps module top(
clk, sw, seg, an
);
//FPGA时钟
input [:] sw; // 16位拨动开关,其中SW[0]可用于作为复位信号rst
input clk;
output [:] seg; // 8段数码管驱动,低电平有效
output [:] an; // 8段数码管片选信号,低电平有效
wire [:] data; //待显示内容
wire clk1000Hz, clk100Hz, clk10Hz, clk1Hz;//1000/100/10/1Hz的时钟
FrequencyDivider U_FRQNCYDVD(clk, clk1000Hz, clk100Hz, clk10Hz, clk1Hz);//分频器
SevenSegDisp U_DISP(clk1000Hz, sw,seg, an);
module FrequencyDivider (clk, clk1000Hz, clk100Hz, clk10Hz, clk1Hz);//分频器
input clk; // 系统时钟
output reg clk1000Hz; // 分频后的时钟1000Hz
output reg clk100Hz; //分频后的时钟100Hz
output reg clk10Hz; //分频后的时钟10Hz
output reg clk1Hz; // 分频后的时钟1Hz
parameter N1000 = 50_000; // 1000Hz的时钟,N=fclk/fclk_N
parameter N100 = 50_000_0; // 1000Hz的时钟,N=fclk/fclk_N
parameter N10 = 50_000_00; // 1000Hz的时钟,N=fclk/fclk_N
parameter N1 = 50_000_000; // 1Hz的时钟,N=fclk/fclk_N
reg [:] counter1000, counter100, counter10, counter1; /* 计数器变量,通过计数实现分频。
当计数器从0计数到(N/2-1)时,
输出时钟翻转,计数器清零 */
always @(posedge clk) begin // 时钟上升沿
if(counter1000==N1000) begin
clk1000Hz <= ~clk1000Hz;
counter1000 <= 'h0;
end
else
counter1000 <= counter1000 + ;
end always @(posedge clk) begin // 时钟上升沿
if(counter100==N100) begin
clk100Hz <= ~clk100Hz;
counter100 <= 'h0;
end
else
counter100 <= counter100 + ;
end always @(posedge clk) begin // 时钟上升沿
if(counter10==N10) begin
clk10Hz <= ~clk10Hz;
counter10 <= 'h0;
end
else
counter10 <= counter10 + ;
end always @(posedge clk) begin // 时钟上升沿
if(counter1==N1) begin
clk1Hz <= ~clk1Hz;
counter1 <= 'h0;
end
else
counter1 <= counter1 + ;
end
endmodule
`timescale 20ms / 1ms
module SevenSegDisp(clk,sw,seg,an);
input clk;
input [:] sw; // 16位拨动开关
output [:] seg; // 7段数码管驱动,低电平有效
output [:] an; // 7段数码管片选信号,低电平有效 reg [:] q;
wire [:] data;
initial
begin
q='b00;
end
// Counter8 U_CNT(clk,q);
always @(posedge clk ) begin
q<=q+;
if (q=='b11) q= 2'b00;
else q = q;
end Mem U_MEM (q,sw,data);
Decoder3_8 U_D38(q, an); //片选
SevenSegDecoder U_SSD1(data,seg); //8段码 endmodule
`timescale 20ms / 1ms module Mem (num,sw,data);
input [:] num;
input [:] sw;
output [:] data;
reg [:] mem [:];
// initial
// begin
// assign sw=16'h0000;
// end
assign data = mem[num];
always @(*) begin
mem[] = sw[:];
mem[] = sw[:];
mem[] = sw[:];
mem[] = sw[:];
end endmodule
`timescale 20ms / 1ms module Decoder3_8(num, sel);
input [: ] num; // 数码管编号:0~7
output reg [:] sel; // 7段数码管片选信号,低电平有效 always @(num) begin
case(num)
'd0: sel = #10000000 8'b11111110;
'd1: sel = #10000000 8'b11111101;
'd2: sel = #10000000 8'b11111011;
'd3: sel = #10000000 8'b11110111;
default: sel = 'b11111111;
endcase
end endmodule
module SevenSegDecoder(
data, segments
);
input [:] data;
output [:] segments; assign segments = {dp, cg, cf, ce, cd, cc, cb, ca}; reg dp, cg, cf, ce, cd, cc, cb, ca;
always @(data) begin
case(data)
'h0: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_0011;
'h1: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1001_1111;
'h2: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0010_0101;
'h3: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_1101;
'h4: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1001_1001;
'h5: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0100_1001;
'h6: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0100_0001;
'h7: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_1111;
'h8: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_0001;
'h9: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_1001;
'ha: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_0001;
'hb: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1100_0001;
'hc: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1110_0101;
'hd: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1000_0101;
'he: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0110_0001;
'hf: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0111_0001;
default: {ca, cb, cc, cd, ce, cf, cg, dp} = 'b1111_1111;
endcase
end endmodule
set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz
#create_clock -add -name sys_clk_pin -period 10.00 -waveform { } [get_ports {CLK}]; set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { sw[] }];
set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[]
set_property -dict { PACKAGE_PIN M13 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[]
set_property -dict { PACKAGE_PIN R15 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L13N_T2_MRCC_14 Sch=sw[]
set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L12N_T1_MRCC_14 Sch=sw[]
set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L7N_T1_D10_14 Sch=sw[]
set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L17N_T2_A13_D29_14 Sch=sw[]
set_property -dict { PACKAGE_PIN R13 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L5N_T0_D07_14 Sch=sw[]
set_property -dict { PACKAGE_PIN T8 IOSTANDARD LVCMOS18 } [get_ports { sw[] }]; #IO_L24N_T3_34 Sch=sw[]
set_property -dict { PACKAGE_PIN U8 IOSTANDARD LVCMOS18 } [get_ports { sw[] }]; #IO_25_34 Sch=sw[]
set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=sw[]
set_property -dict { PACKAGE_PIN T13 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L23P_T3_A03_D19_14 Sch=sw[]
set_property -dict { PACKAGE_PIN H6 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L24P_T3_35 Sch=sw[]
set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L20P_T3_A08_D24_14 Sch=sw[]
set_property -dict { PACKAGE_PIN U11 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L19N_T3_A09_D25_VREF_14 Sch=sw[]
set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports { sw[] }]; #IO_L21P_T3_DQS_14 Sch=sw[] ## segment display set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #ca
set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #cb
set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #cc
set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #cd
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #ce
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #cf
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #cg
set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { seg[] }]; #dp set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { an[] }]; #an[]
nexys4ddr数码管动态扫描Verilog例程的更多相关文章
- OpenGL 画出雷达动态扫描效果(二) 非底图
OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...
- Cesium专栏-雷达遮罩动态扫描(附源码下载)
Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...
- 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减 直至765398并保持此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动 ,当数码管上数减到停止时,实验板上流水灯出停止然后全部开始闪烁,3秒后(用 T0定时)流水灯全部关闭,数码管上显示出“HELLO”,到此保持住
#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigne ...
- OpenGL 画出雷达动态扫描效果(一)
最终效果如下所示 Demo下载 http://files.cnblogs.com/xd-jinjian/Debug.zip 源代码下载 http://download.csdn.net/detail ...
- 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...
- AC620教程 第十五节 8位7段数码管驱动设计与验证
本章导读 电子系统中常用的显示设备有数码管.LCD液晶以及VGA显示器等.其中数码管又可分为段式显示(7段.米字型等)以及点阵显示(8*8.16*16等),LCD液晶的应用可以分为字符式液晶(1602 ...
- #51单片机#8位数码管(74HC595芯片)的使用方法
数码管基本属性:1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示:2.宽工作电压3.3V到5V:3.PCB板尺寸:71mm*22mm4.数码管型号:0.36 4位共阳 ...
- FPGA学习笔记(六)—— 时序逻辑电路设计
用always@(posedge clk)描述 时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...
- AVR单片机教程——走向高层
本文隶属于AVR单片机教程系列. 在系列教程的最后一篇中,我将向你推荐3个可以深造的方向:RTOS.C++.事件驱动.掌握这些技术可以帮助你更快.更好地开发更大的项目. 本文涉及到许多概念性的内容 ...
随机推荐
- BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)
题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...
- 使用ss命令对tcp连接数和状态的监控性能优化
之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以改用ss命令对脚本进行优化 对tcp连接数和状态的 ...
- 如何在 Linux/Unix/Windows 中发现隐藏的进程和端口
unhide 是一个小巧的网络取证工具,能够发现那些借助 rootkit.LKM 及其它技术隐藏的进程和 TCP/UDP 端口.这个工具在 Linux.UNIX 类.MS-Windows 等操作系统下 ...
- Java面试题-基础知识
参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...
- A1076. Forwards on Weibo
Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...
- python3安装pycurl
centos7安装pycurl 出现错误 FileNotFoundError: [Errno 2] No such file or directory: 'curl-config'ImportErro ...
- codesmith生成的结果页不显示,问题在于第一行的文件头
在于这里: TargetLanguage="C#",这个能增加cs的格式
- (栈 注意格式)P1739 表达式括号匹配 洛谷
题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...
- 爬虫之requests请求库高级应用
1.SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306. ...
- linux 优化(一)
uptime up 表示系统正在运行 10:54:19 表示当前时间 8 min 表示系统启动的总时间 1 user 表示正在登陆用户数 load average 表示系统平均负载,最后三个数字呢,依 ...