2673|9

17

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CPLD逻辑求助,高手请帮帮我!!!! [复制链接]


应该用计数器去实现,但我不知道怎么去处理,请帮忙看看!
此帖出自FPGA/CPLD论坛

最新回复

module top(pwm_in,pwm_out,clk_30m); input pwm_in,clk_30m; output pwm_out; reg[15:0] count; reg mode; reg pwm_out; always @( negedge clk_30m) begin if(mode) begin if(count==5) begin count  详情 回复 发表于 2013-7-3 09:32
点赞 关注
 

回复
举报

1144

帖子

17

TA的资源

纯净的硅(高级)

沙发
 
这是考试题啊?

实现倒不太难,
首先30M计数分频到30K,用于当大于0.95时输出相应PWM

然后在always 里,检测PWM的上升下降沿,
判断处理,
此帖出自FPGA/CPLD论坛

点评

是这样的,30M晶振产生,PWM的30K是由DSP控制板产生,现在由于我一块驱动芯片不能识别高电平,所以当DSP发出高电平时,必须经过我板子的CPLD做处理变成0.95,(DSP的程序不能修改)  详情 回复 发表于 2013-7-1 15:58
这不是考试题,是项目里面用到的,我思路很清晰,但是我不知道怎么去写,编程能力不够,刚学半个月,想请大家帮帮忙。  详情 回复 发表于 2013-7-1 15:53
 
 

回复

1144

帖子

17

TA的资源

纯净的硅(高级)

板凳
 
这是考试题啊?

实现倒不太难,
首先30M计数分频到30K,用于当大于0.95时输出相应PWM

然后在always 里,检测PWM的上升下降沿,
判断处理,
此帖出自FPGA/CPLD论坛
 
 
 

回复

581

帖子

0

TA的资源

五彩晶圆(初级)

4
 
out占空比0.95对吗?一个波形怎么只有占空比?问的有问题。
此帖出自FPGA/CPLD论坛

点评

问的没有问题啊,就是输入PWM不是高电平时,输出等于输入,当检测到时高电平时,就输出0.95的PWM  详情 回复 发表于 2013-7-1 15:55
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发fxyc87 的帖子

这不是考试题,是项目里面用到的,我思路很清晰,但是我不知道怎么去写,编程能力不够,刚学半个月,想请大家帮帮忙。
此帖出自FPGA/CPLD论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 4楼kdy 的帖子

问的没有问题啊,就是输入PWM不是高电平时,输出等于输入,当检测到时高电平时,就输出0.95的PWM
此帖出自FPGA/CPLD论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 沙发fxyc87 的帖子

是这样的,30M晶振产生,PWM的30K是由DSP控制板产生,现在由于我一块驱动芯片不能识别高电平,所以当DSP发出高电平时,必须经过我板子的CPLD做处理变成0.95,(DSP的程序不能修改)
此帖出自FPGA/CPLD论坛
 
 
 

回复

581

帖子

0

TA的资源

五彩晶圆(初级)

8
 
哦,这样啊。
//30K频率 脉宽33.3us 高低电平各16.6us 30M时钟 计数周期33ns 计数16.6us需要553周期

//
//PWM变低就启动计数 一直为高则计数停留在1024处
//
reg [10:0]cnt_pulse;

always @(posedge clk30m or negedge PWM)
begin
        if(!PWM)
                cnt_pulse = 0;
        else if (cnt_pulse[10]==1)
                cnt_pulse = cnt_pulse;
        else
                cnt_pulse = cnt_pulse + 1;
end

//pwm_ok: 1 OK  0 NOK
wire pwm_ok = !(cnt_pulse[10]==1);

reg [4:0]cnt_095;
always @(posedge clk30m or posedge pwm_ok)
begin
        if(pwm_ok)                                        //PWM OK不工作
                cnt_095 = 0;
        else if(cnt_095 == 19)                                                               
                cnt_095 = 0;
        else                                                                 //PWM 不OK工作
                cnt_095 = cnt_095 + 1;
end

wire pwm_095 = (cnt_095==1);

assign out = pwm_ok ? PWM: pwm_095;
没有验证,写完就发了,自己验证下。
直接要代码习惯不好啊,下不为例

[ 本帖最后由 kdy 于 2013-7-1 20:25 编辑 ]
此帖出自FPGA/CPLD论坛

点评

谢谢!按照你的思路,程序已经修改过了。如下: module allen(clk30m,pwm,out); input clk30m,pwm; output out; reg [10:0]cnt_pulse; always @(posedge clk30m or negedge pwm) begin if(!pwm)  详情 回复 发表于 2013-7-2 18:25
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼kdy 的帖子

谢谢!按照你的思路,程序已经修改过了。如下:
module allen(clk30m,pwm,out);
input clk30m,pwm;
output out;
reg [10:0]cnt_pulse;

always @(posedge clk30m or negedge pwm)
begin
        if(!pwm)
                cnt_pulse = 0;
        else if (cnt_pulse[10]==1)
                cnt_pulse = cnt_pulse;
        else
                cnt_pulse = cnt_pulse + 1;
end
wire pwm_ok = !(cnt_pulse[10]==1);
reg [9:0]cnt_095;
always @(posedge clk30m or posedge pwm_ok)
begin
        if(pwm_ok)                              
                cnt_095 = 0;
        else
              cnt_095= cnt_095 + 1;            
end
wire pwm_095 = !(cnt_095>=955 && cnt_095<=1023);

assign out = pwm_ok ? pwm : pwm_095 ;
endmodule
此帖出自FPGA/CPLD论坛
 
 
 

回复

1144

帖子

17

TA的资源

纯净的硅(高级)

10
 
  1. module top(pwm_in,pwm_out,clk_30m);

    input pwm_in,clk_30m;

    output pwm_out;

    reg[15:0] count;

    reg mode;

    reg pwm_out;

    always @( negedge clk_30m)

    begin

    if(mode)

    begin

    if(count==5)

    begin

    count<=0;

    mode<=0;

    pwm_out<=1;

    end

    else

    count<=count+1'd1;

    end

    else

    begin

    if(count==95)

    begin

    count<=0;

    mode<=1;

    pwm_out<=0;

    end

    else

    count<=count+1'd1;

    end

    end

    endmodule

复制代码
完成了一部分,这部分是 当置高电平时,所做的处理,下有仿真图,呵,我也学习练练手,
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表