搜索
bottom↓
回复: 25

看上面有发呼吸灯的,我也发个Verilog 查表法的呼吸灯

[复制链接]

出0入0汤圆

发表于 2014-9-19 10:18:47 | 显示全部楼层 |阅读模式
//ISE环境,12M时钟
module Notify_light(
        input  CLK,
        input  nRst,

        input  enable,

        output reg pwm_out
);

reg [7:0] PWM_Tab[0:63];
reg [5:0] PWM_Tab_index;
wire [7:0] PWM_Value = PWM_Tab[PWM_Tab_index];

`define init_2(b0,b1) PWM_Tab[i]=b0; PWM_Tab[i+1]=b1; i=i+2
`define init_4(b0,b1,b2,b3) `init_2(b0, b1); `init_2(b2,b3)
`define init_8(b0,b1,b2,b3,b4,b5,b6,b7) `init_4(b0,b1,b2,b3); `init_4(b4,b5,b6,b7)

integer i;
initial begin
         i = 0;
        `init_8(1  , 5  , 11 , 15 , 20 , 25 , 30 , 36);
        `init_8(43 , 49 , 56 , 64 , 72 , 88 , 97 , 105);
        `init_8(114, 132, 141, 150, 158, 167, 183, 206);
        `init_8(212, 225, 230, 235, 240, 245, 250, 254);
        `init_8(250, 244, 240, 235, 225, 219, 212, 206);
        `init_8(191, 183, 175, 167, 150, 141, 132, 123);
        `init_8(114, 105, 97 , 88 , 72 , 64 , 56 , 49);
        `init_8(36 , 30 , 25 , 20 , 15 , 11 , 5  , 0);
end

//=========================================================
reg [7:0] pwm_count;
reg [6:0] tick;
reg [11:0] divider;
`define DIV_TOP                12'd2400

always @(posedge CLK or negedge nRst) begin
        if (!nRst) begin
                PWM_Tab_index <= 0;
                pwm_count <= 0;
                tick <= 0;
                divider <= 0;
        end else begin
                if(enable) begin
                        tick <= tick + 1;
                        if (&tick) begin
                                pwm_count <= pwm_count +1;
                                 if(&pwm_count)begin
                                        pwm_out <= 1'b0;
                                end else if(pwm_count == PWM_Value) begin
                                        pwm_out <= 1'b1;
                                end

                                if(divider == `DIV_TOP) begin
                                        divider <= 0;
                                        PWM_Tab_index <= PWM_Tab_index + 1;
                                end else begin
                                        divider <= divider + 1;
                                end
                        end
                end else begin
                        pwm_out <= 0;
                end
        end
end
endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-9-19 10:32:12 | 显示全部楼层
不错,支持原创

出0入0汤圆

发表于 2014-9-19 11:09:03 | 显示全部楼层
看着比前一个简单多了,支持!!

出0入0汤圆

发表于 2014-9-19 11:46:33 | 显示全部楼层
相当不错,抽个时间去验证一下。

出0入16汤圆

发表于 2014-9-19 11:47:50 | 显示全部楼层
mark!呼吸灯!!!!

出0入0汤圆

发表于 2014-9-19 12:33:13 | 显示全部楼层
mark  一下

出0入0汤圆

发表于 2014-9-21 22:23:01 | 显示全部楼层
谢谢分享,学习一下。

出40入42汤圆

发表于 2014-9-21 23:36:19 | 显示全部楼层
顶一下楼主

出0入0汤圆

发表于 2014-9-22 00:39:46 | 显示全部楼层
第一次看到initial这样用,initial不是不能综合吗?

出5入0汤圆

发表于 2014-9-22 00:43:31 来自手机 | 显示全部楼层
好牛啊!

出0入0汤圆

 楼主| 发表于 2014-9-22 09:08:34 | 显示全部楼层
dongyanbo 发表于 2014-9-22 00:39
第一次看到initial这样用,initial不是不能综合吗?

xilinx的综合器是可以的,XST的说明书有讲:
Block and distributed RAM initial contents can be specified by initialization of the signal
describing the memory array in your HDL code. Do this directly in your HDL code,or
specify a file containing the initialization data.

出5入0汤圆

发表于 2014-9-22 09:59:41 | 显示全部楼层
能找个呼吸灯最佳曲线就好了,,

出0入0汤圆

发表于 2014-9-22 10:03:09 | 显示全部楼层
楼主研究的真仔细,那PWM_Tab会自动综合成Block and distributed RAM了?

出0入0汤圆

 楼主| 发表于 2014-9-22 10:22:10 | 显示全部楼层
LinuxTux.China 发表于 2014-9-22 09:59
能找个呼吸灯最佳曲线就好了,,

这个数据表的曲线是从icufflinks的源码里改过来的,icufflinks 的数据表是反向破解了苹电MAC的呼吸灯的曲线得到的。

所这个应该算比较好的曲线了。

出0入25汤圆

发表于 2014-9-22 10:26:58 | 显示全部楼层
楼主好厉害,,拿去在EasyFPGA060上去试试

出0入0汤圆

发表于 2014-9-22 10:36:30 | 显示全部楼层
学习      

出5入0汤圆

发表于 2014-9-22 12:47:03 | 显示全部楼层
hell-prototypes 发表于 2014-9-22 10:22
这个数据表的曲线是从icufflinks的源码里改过来的,icufflinks 的数据表是反向破解了苹电MAC的呼吸灯的曲 ...

奥,有这样的渊源啊,呵呵,

出0入0汤圆

发表于 2014-9-25 00:15:25 | 显示全部楼层
学习了,简洁

出0入0汤圆

发表于 2014-9-25 06:43:08 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2014-10-28 15:24:33 | 显示全部楼层
楼主,CLK是多少啊?

出0入0汤圆

发表于 2014-10-28 15:26:26 | 显示全部楼层
这个有用,收藏先

出0入0汤圆

发表于 2014-10-28 15:36:28 | 显示全部楼层
不错 学习了

出0入0汤圆

发表于 2014-10-28 15:38:04 | 显示全部楼层
学习了,有空试一下,谢谢楼主

出0入0汤圆

发表于 2014-10-28 21:59:03 | 显示全部楼层
分析下呼吸灯怎么才能感觉平顺

出0入0汤圆

发表于 2014-10-29 00:50:14 | 显示全部楼层
学习了            

出0入0汤圆

发表于 2014-10-29 12:19:58 | 显示全部楼层
学习了,在EPM240上试了下,最近在学这个
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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