题目:实现数码管动态扫描功能,将十六个开关的值以十六进制的方式在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例程的更多相关文章

  1. OpenGL 画出雷达动态扫描效果(二) 非底图

    OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...

  2. Cesium专栏-雷达遮罩动态扫描(附源码下载)

    Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...

  3. 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减 直至765398并保持此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动 ,当数码管上数减到停止时,实验板上流水灯出停止然后全部开始闪烁,3秒后(用 T0定时)流水灯全部关闭,数码管上显示出“HELLO”,到此保持住

    #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigne ...

  4. OpenGL 画出雷达动态扫描效果(一)

    最终效果如下所示 Demo下载  http://files.cnblogs.com/xd-jinjian/Debug.zip 源代码下载 http://download.csdn.net/detail ...

  5. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  6. AC620教程 第十五节 8位7段数码管驱动设计与验证

    本章导读 电子系统中常用的显示设备有数码管.LCD液晶以及VGA显示器等.其中数码管又可分为段式显示(7段.米字型等)以及点阵显示(8*8.16*16等),LCD液晶的应用可以分为字符式液晶(1602 ...

  7. #51单片机#8位数码管(74HC595芯片)的使用方法

    数码管基本属性:1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示:2.宽工作电压3.3V到5V:3.PCB板尺寸:71mm*22mm4.数码管型号:0.36 4位共阳 ...

  8. FPGA学习笔记(六)—— 时序逻辑电路设计

    用always@(posedge clk)描述        时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...

  9. AVR单片机教程——走向高层

    本文隶属于AVR单片机教程系列.   在系列教程的最后一篇中,我将向你推荐3个可以深造的方向:RTOS.C++.事件驱动.掌握这些技术可以帮助你更快.更好地开发更大的项目. 本文涉及到许多概念性的内容 ...

随机推荐

  1. 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\),和它在同一 ...

  2. 使用ss命令对tcp连接数和状态的监控性能优化

    之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以改用ss命令对脚本进行优化 对tcp连接数和状态的 ...

  3. 如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

    unhide 是一个小巧的网络取证工具,能够发现那些借助 rootkit.LKM 及其它技术隐藏的进程和 TCP/UDP 端口.这个工具在 Linux.UNIX 类.MS-Windows 等操作系统下 ...

  4. Java面试题-基础知识

    参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...

  5. A1076. Forwards on Weibo

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  6. python3安装pycurl

    centos7安装pycurl 出现错误 FileNotFoundError: [Errno 2] No such file or directory: 'curl-config'ImportErro ...

  7. codesmith生成的结果页不显示,问题在于第一行的文件头

    在于这里: TargetLanguage="C#",这个能增加cs的格式

  8. (栈 注意格式)P1739 表达式括号匹配 洛谷

    题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...

  9. 爬虫之requests请求库高级应用

    1.SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306. ...

  10. linux 优化(一)

    uptime up 表示系统正在运行 10:54:19 表示当前时间 8 min 表示系统启动的总时间 1 user 表示正在登陆用户数 load average 表示系统平均负载,最后三个数字呢,依 ...