fpga中的case语句

  1. case语句模型
module ex_case(
   input   wire             rst_n,
   input   wire             sclk,
   output  reg              o_dv,
   output  reg     [7:0]    o_data,
   input   wire    [9:0]    i_data,
   input   wire    [7:0]    i_addr
 );

reg  [2:0] cnt_7;
// 不通功能的寄存器分开always块来写,这样代码的可维护性强,可持续性强。
always @(posedge sclk or negedge rst_n) begin
 if (rst_n == 1'b0) begin
     cnt_7 <= 3'd0;
 end
 else begin
     cnt_7 <= cnt_7 + 3'd1;
 end
end

// 时序逻辑
// case相当于是一个选择器
always @(posedge sclk or negedge rst_n)
  if (rst_n == 1'b0) begin
   o_data <= 8'd0;
   o_dv <= 1'b0;
  end 
  else begin
   case(cnt_7)     //cnt_7 相当于一个查找表地址
     3'd0:begin 
              o_data <= 3'd7; //当cnt_7等于3'd0执行词条语句
              o_dv <= 1'b1;
          end  
     3'd1:begin
              o_data <= 3'd0;
              o_dv <= 1'b0;
           end   
     3'd2:begin
              o_data <= 3'd5;
              o_dv <= 1'b1;
            end 
      default: begin
              o_data <= 3'd0;
              o_dv <= 1'b0;
            end           
   endcase
  end

endmodule




  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGAcase语句常用于状态机的实现。在FPGA,状态机是一种常见的电路实现方式,它可以根据输入信号的变化,自动地切换到不同的状态,并在每个状态执行不同的操作。 case语句可以根据输入的控制信号,选择不同的操作。在FPGA,控制信号常常是由时钟信号和触发信号组合而成的。时钟信号提供了时序控制,而触发信号则提供了事件触发的控制。 例如,在Verilog,可以使用如下的代码实现一个简单的状态机: ``` module fsm ( input clk, input reset, input trigger, output reg [1:0] state ); // 定义状态常量 localparam ST_IDLE = 2'b00; localparam ST_COUNTING = 2'b01; localparam ST_DONE = 2'b10; always @(posedge clk) begin if (reset) begin state <= ST_IDLE; end else begin case (state) ST_IDLE: begin if (trigger) begin state <= ST_COUNTING; end end ST_COUNTING: begin if (count == 0) begin state <= ST_DONE; end end ST_DONE: begin // do nothing end endcase end end endmodule ``` 在上面的代码,定义了三个状态常量,分别对应三个状态。在always块,使用了case语句来根据当前状态和控制信号来选择不同的操作。在ST_IDLE状态,当触发信号被触发时,状态切换为ST_COUNTING;在ST_COUNTING状态,当计数器计数到0时,状态切换为ST_DONE;在ST_DONE状态,不做任何操作。 使用case语句实现状态机是FPGA常见的应用之一,它可以方便地实现复杂的逻辑控制,并且具有高度的可重用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值