题目:实现数码管动态扫描功能,将十六个开关的值以十六进制的方式在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. POJ 2672 Tarjan + 缩点 + 拓扑思想

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17383 ...

  2. 「2017 山东三轮集训 Day7 解题报告

    「2017 山东三轮集训 Day7」Easy 练习一下动态点分 每个点开一个线段树维护子树到它的距离 然后随便查询一下就可以了 注意线段树开大点... Code: #include <cstdi ...

  3. hdu 3374 String Problem(kmp+最小表示法)

    Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...

  4. A1088. Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  5. JavaScript(JS)之Javascript对象DOM之增删改查(四)

    创建节点:var ele_a = document.createElement('a');添加节点:ele_parent.appendChild(ele_img);删除节点:ele_parent.re ...

  6. JS验证身份证

    话不多说,直接看代码 JS部分 /** * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * ...

  7. win10开机自启动

    快捷方式复制到win+ R 编辑shell:startup enter后的文件夹中

  8. pytest 5. fixture之yield实现teardown

    前言: 1.前面讲的是在用例前加前置条件,相当于setup,既然有setup那就有teardown,fixture里面的teardown用yield来唤醒teardown的执行 看以下的代码: #!/ ...

  9. Gym 101915

    Gym - 101915A  Printing Books 题意:有一本书,从第X页开始,一共用了n位数字,求此书一共多少页.99就是两位数字,100就是三位数字. 思路:直接模拟即可,我用了一个hi ...

  10. POJ 2240 Arbitrage (Bellman Ford判正环)

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:27167   Accepted: 11440 Descri ...