转移表

// Table definition:
typedef long (*functs)(char c);
functs JumpTable[] = { DoOne,DoTwo,DoThree /* etc*/} ;

// some code that uses the table:
long result = JumpTable[selector](i++);

转移表的内在的基本思路在于:将待调用函数的指针插入表中,用选择项作为表的索引

具备了if else功能

### 74161 的状态转移及其应用 74161 是一种常用的 **4 位二进制同步计数器**,其功能强大且广泛应用于数字电路设计中。以下是关于该芯片的状态转移及相关特性的详细介绍。 #### 状态转移概述 74161 芯片具有四个主要控制端口:`CLK`(时钟输入)、`LD'`(并行加载使能端,低电平有效)、`CLR'`(异步清零端,低电平有效),以及 `ENP/ENT`(两个使能端)。这些端口共同决定了计数器的行为模式。当所有条件满足时,74161 将按照预设的规则进行状态转换[^3]。 | 输入信号 | 功能描述 | |----------|-----------| | CLR'=0 | 清零操作,强制输出为 0000 | | LD'=0 | 并行加载数据到计数器寄存器 | | ENP=0 或 ENT=0 | 计数暂停,保持当前状态不变 | | CLK 上升沿触发 | 如果 ENP 和 ENT 均为高电平,则执行加法计数 | #### 完整状态转移展示了在不同输入组合下的具体状态变化: | CLR' | LD' | ENP | ENT | D3D2D1D0 (输入) | 当前状态 Q3Q2Q1Q0 | 下一状态 Q3Q2Q1Q0 | |------|-----|------|------|------------------|--------------------|--------------------| | 0 | X | X | X | XXXX | XXXX | 0000 | | 1 | 0 | X | X | ABCD | XXXX | ABCD | | 1 | 1 | 0 | X | XXXX | Q3Q2Q1Q0 | Q3Q2Q1Q0 | | 1 | 1 | X | 0 | XXXX | Q3Q2Q1Q0 | Q3Q2Q1Q0 | | 1 | 1 | 1 | 1 | XXXX | Q3Q2Q1Q0 | Q3+1, Q2+Carry, Q1+Carry, Q0+1 | 注意:以上格中的 “XXXX” 示任意值,“ABCD” 则代通过并行加载设置的具体数值[^1]。 #### 实现代码示例 如果需要模拟此行为可以采用如下 Verilog 描述方式实现类似的逻辑功能: ```verilog module counter_74161 ( input wire clk, input wire clr_n, input wire load_n, input wire en_p, input wire en_t, input wire [3:0] d_in, output reg [3:0] q_out ); always @(posedge clk or negedge clr_n) begin if (!clr_n) q_out <= 4'b0000; else if (!load_n) q_out <= d_in; else if (!(en_p && en_t)) q_out <= q_out; // Hold state when disabled else q_out <= q_out + 1; end endmodule ``` #### 关于异步计数器对比 尽管本讨论聚焦于同步计数器 74161,但值得注意的是,异步计数器的工作机制有所不同。例如,在某些情况下,异步计数器会在每个时钟下降沿更新状态,并可能导致毛刺现象或传播延迟问题。相比之下,74161 使用单一时钟源驱动所有触发器,从而避免这些问题的发生[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值