OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5480|回复: 2

[ALTERA] FPGA新起点之seg_led_dynamic总结

[复制链接]

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
发表于 2021-8-23 14:23:44 | 显示全部楼层 |阅读模式
由于是刚接触fpga一周,对Verilog语法只是懂一点点。
例程里学到的东西或者说是疑问:
top_seg_led.v:
module top_seg_led(
    input            sys_clk  ,       // 全局时钟信号
    input            sys_rst_n,       // 复位信号(低有效)

    output    [5:0]  seg_sel  ,       // 数码管位选信号,为什么不是output reg [5:0] seg_sel
    output    [7:0]  seg_led          // 数码管段选信号,为什么不是output reg [7:0] seg_led
);

wire    [19:0]  data;                 // 数码管显示的数值,为什么不是 reg [19:0] data


seg_led.v:
localparam  CLK_DIVIDE = 4'd10     ;        // 时钟分频系数
localparam  MAX_NUM    = 13'd5000  ;

parameter可用作在顶层模块中例化底层模块时传递参数的接口,
localparam的作用域仅仅限于当前module,不能作为参数传递的接口。


wire   [3:0]              data0    ;        // 个位数,不能定义为reg [3:0] data0
wire   [3:0]              data1    ;        // 十位数,不能定义为reg [3:0] data1
wire   [3:0]              data2    ;        // 百位数,不能定义为reg [3:0] data2
wire   [3:0]              data3    ;        // 千位数,不能定义为reg [3:0] data3
wire   [3:0]              data4    ;        // 万位数,不能定义为reg [3:0] data4
wire   [3:0]              data5    ;        // 十万位数,不能定义为reg [3:0] data5


//提取显示数值所对应的十进制数的各个位
assign  data0 = data % 4'd10;               // 个位数
assign  data1 = data / 4'd10 % 4'd10   ;    // 十位数
assign  data2 = data / 7'd100 % 4'd10  ;    // 百位数
assign  data3 = data / 10'd1000 % 4'd10 ;   // 千位数
assign  data4 = data / 14'd10000 % 4'd10;   // 万位数
assign  data5 = data / 17'd100000;          // 十万位数



学会了产生分频时钟:
//对系统时钟10分频,得到的频率为5MHz的数码管驱动时钟dri_clk
always @(posedge clk or negedge rst_n) begin
   if(!rst_n) begin
       clk_cnt <= 4'd0;
       dri_clk <= 1'b1;
   end
   else if(clk_cnt == CLK_DIVIDE/2 - 1'd1) begin
       clk_cnt <= 4'd0;
       dri_clk <= ~dri_clk;
   end
   else begin
       clk_cnt <= clk_cnt + 1'b1;
       dri_clk <= dri_clk;
   end
end

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-23 14:47:09 | 显示全部楼层
这是原子例程的警告:
1629700859(1).jpg
Warning (10230): Verilog HDL assignment warning at seg_led.v(62): truncated value with size 20 to match size of target (4)

警告(10230):seg_led.v(65)处的Verilog HDL分配警告:大小为20的截断值与目标(4)的大小匹配

官网回复:Warning (10230): Verilog HDL assignment warning at &lt;design&gt;.v(&lt;line number&gt;): truncated value with size 32 to match size of target n (intel.com)

但好像这里指定了位宽也没解决这个Warning
回复 支持 反对

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-23 15:15:15 | 显示全部楼层
自己全部重新写的简化版代码,没有en,sign,point,也不用dr_clk。
框架.jpg
自己写的流程:
(1)先写seg_led_dynamic.v这个顶层文件
(2)写led_control.v让灯亮包括 位选和段选,
(2)写led_count.v控制灯亮什么数字
led_control.jpg
led_count.jpg
seg_led_dynamic.jpg

seg_led_dynamic.zip

9.25 MB, 下载次数: 0

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 20:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表