verilog计数器中增减操作之资源占用

安路Anlogic TD Release_2026.1_SP2,器件选择:EG4A20BG256

方法1)case语句

复制代码
module test( input clk,input rst_n,input sw,output reg [3:0] led );

always @(posedge clk or negedge rst_n)
   if (!rst_n) 
      led<= 0; 
   else begin   
    case (sw)
      1: led<=led+1;
      default: led<=led-1;
    endcase 
   end
endmodule

方法2)if语句

复制代码
module test( input clk,input rst_n,input sw,output reg [3:0] led  );

always @(posedge clk or negedge rst_n)
   if (!rst_n) 
      led<= 0; 
   else begin   
    if (sw)led<=led+1;
    else led<=led-1;
    end
endmodule

方法3)条件运算符? :

复制代码
module test( input clk,input rst_n,input sw,output reg [3:0] led  );

always @(posedge clk or negedge rst_n)
   if (!rst_n) 
      led<= 0; 
   else begin   
    led<=sw?(led+1):(led-1);
    end
endmodule

方法4)2*sw-1

复制代码
module test( input clk,input rst_n,input sw,output reg [3:0] led  );

always @(posedge clk or negedge rst_n)
   if (!rst_n) 
      led<= 0; 
   else begin   
    led<=led+2*sw-1;
    end
endmodule

资源占用比较:方法4占用资源最少!

|---------|-----|-----|-----------|-----------|------|------|
| 方法 | not | DFF | MACRO_ADD | MACRO_MUX | lut4 | lut5 |
| case | 2 | 4 | 2 | 3 | 3 | 1 |
| if | 2 | 4 | 2 | 3 | 3 | 1 |
| ? : | 2 | 4 | 2 | 3 | 3 | 1 |
| 2*sw-1 | 1 | 4 | 2 | 0 | 3 | 1 |

相关推荐
学习FPGA的电气小兴兴3 天前
基于FPGA的CORDIC向量模式实现arctan运算,Verilog HDL实现
嵌入式硬件·fpga开发·数字信号处理·verilog·fpga·cordic·arctan
学习FPGA的电气小兴兴9 天前
基于FPGA的CORDIC旋转模式实现sin和cos运算
fpga开发·信号处理·数字信号处理·verilog·fpga·verilog hdl·cordic
FPGA开源工坊16 天前
ISP图像处理--Bayer Raw格式
图像处理·人工智能·verilog·fpga·isp
qq_1508419918 天前
用verilog语言在Quartus Prime Lite 18中对CPLD EPM570T100C5进行编程
verilog·quartus·cpld
芯路行者1 个月前
4.4 HDLBits —— 更多时序逻辑电路
fpga开发·verilog·fpga·hdlbits
芯路行者1 个月前
7 HDLBits —— 验证:编写测试激励文件
fpga开发·verilog·fpga·hdlbits
芯路行者1 个月前
4.1 HDLBits —— 时序逻辑电路之锁存器与触发器
fpga开发·verilog·fpga·hdlbits
芯路行者1 个月前
5 HDLBits —— 构建更大的电路
fpga开发·verilog·fpga·hdlbits
芯路行者1 个月前
4.3 HDLBits —— 时序逻辑电路之移位寄存器
fpga开发·verilog·fpga·hdlbits