FPGA|CPLD|ASIC论坛
直播中

王麟

9年用户 8经验值
擅长:可编程逻辑 嵌入式技术 处理器/DSP 接口/总线/驱动 控制/MCU
私信 关注
[问答]

Altera cpld编译完使用逻辑单元为0且不起作用为什么

`以下是我的原代码,功能仿真结果和触发信号截图,要实现cpld检测特定时序触发led开闭的功能,功能仿真没有问题,但是编译后逻辑单元为0,且利用STM32发clk和sda信号,led没有反应。但是单独使用clk信号,做一个简单的分频器触发led翻转没有问题。
提示输出引脚被设置为电源或者地,输入引脚没有驱动逻辑。但是单独使用clk分频驱动led没有问题,逻辑单元数也不为0
求大神指点!!!
`timescale 1us/ 1us
module fp_verilog(
            clk,rst_n,
sda,
led
     );

input clk;   //时钟信号 SCL
input rst_n; //复位信号 低电平有效

input sda;   //数据信号 SDA
output led;  //指示灯 1-亮 0-灭

reg s1;

always @(negedge sda or negedge rst_n)
   if(!rst_n) s1 <= 1'b0;
else if(!sda)
        begin
    if(clk)
    begin
   s1 <= 1'b1;
#3000;
s1 <= 1'b0;
end
  end

reg s2;

always @(posedge sda or negedge rst_n)
   if(!rst_n) s2 <= 1'b0;
   else if(sda)
        begin
     if(clk)
     begin
    s2 <= 1'b1;
#3000;
s2 <= 1'b0;
  end
  end

reg state;

always @(posedge s1 or posedge s2 or negedge rst_n)
   if(!rst_n) state <= 1'b0;
else if(s1) state <= 1'b1;
   else if(s2) state <= 1'b0;

reg[1:0] data;

always @(posedge clk or negedge rst_n)
if(!rst_n) data[1:0] <= 2'd0;
   else if(sda&&state) data <= data + 2'd1;
else if(!state) data[1:0] <= 2'd0;

reg led_r;

always @(negedge state or negedge rst_n)
if(!rst_n) led_r <= 1'b0;
else if(data==2'd1) led_r <= 1'b1;
else if(data==2'd0) led_r <= 1'b0;

assign led = led_r;

endmodule` notepad1611281102279.jpg notepad1611281100214.jpg

回帖(1)

卿小小_9e6

2021-1-22 10:51:41
这是运行代码么?
如果是,那代码有问题,问题出在#3000。它只在仿真模式有效,编译时这些直接就优化掉了,相当于你的s1/s2在每段代码内被赋值两次(通常取最后一次赋值结果)。
//------验证
你把#3000去掉,看仿真结果与你现在的运行结果是不是一致。
//------其他
可以尝试“插入代码”或者“添加附件”,错误信息也可以一起发出来。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分