zoukankan      html  css  js  c++  java
  • 设计一个 硬件 实现的 Dictionary(字典)

    Dictionary 就是 字典, 是一种可以根据 Key 来 快速 查找 Value 的 数据结构 。

     

    比如 我们在 C# 里用到的 Dictionary<T>,  

    在 程序设计 里, 字典 通常使用 哈希表(Hash 表) 的 方式 实现, 也可以用 索引 的 方式 实现,

     

    不过 索引 太占空间 了,  所以 在 数据库 里 用的 很普遍, 但是 在 应用程序(内存) 这一层面 好像 没有看到过用 索引 的 。

     

    今天 我们 来 设计一个 用 硬件 实现 的 字典 :      ^^

     

    要开始研究 硬件 来 实现一个 字典 呢, 需要 先 准备 一些 基础知识, 可以先看一下我写的另外一篇文章  《漫谈计算机硬件的设计和实现》

    https://www.cnblogs.com/KSongKing/p/9866334.html

     

    首先, 我们要引入一个 “开关门” 门电路, 就是 除了 “与”、“或”、“非”  门电路 外, 还需要一个 “开关门” 门电路,

    实际上, “开关门” 电路 就是 构成 “与”、“或”、“非”  门电路 的 基础 。

     

    我们来看一下  “开关门” 电路 的 逻辑电路图 :

    当 控制端 输入 0 时, 开关 关, 即 输入端 到 输出端 之间的 电路 断开,

    当 控制端 输入 1 时, 开关 开, 即 输入端 到 输出端 之间的 电路 接通 。

     

    这个 “开关门 ”  是不是有点像 三极管 ?   哈哈哈

     

    接下来, 我们要设计一个  “电子开关”,

    “电子开关” 就是

    当 设定端 是 0 时, 输入端 若 输入 0 , 则 输出端 输出 1, 若 输入端 输入 1 时, 输出端 输入 0,

    当 设定端 是 1 时, 输入端 若 输入 0 , 则 输出端 输出 0, 若 输入端 输入 1 时, 输出端 输入 1,

    这是  ……  ?

     

    哈哈哈,  就是 输入端 输入的 值 和 设定端 相同 时, 输出端 输出 1 (开),  否则 输出端 输出 0 (关) 。

    这有什么用  ?

     

    利用 这个  “设定” 的 功能, 可以实现  “设置 Key”  的 效果 。

     

    我们来看一下 “电子开关” 的 逻辑电路图 :

     

    有了 “电子开关”,  我们 就可以 实现一个 “字典单元”,  一个 “字典单元” 可以 存放 一个 键值对 。

    我们来看一下 “字典单元” 的 逻辑电路图 :

     

     

    简单起见, 上图的这个 字典单元 只有  2 位(2 Bit),  就是说 可以支持   “00”、“01”、“10”、“11”   4 个 键 。

    在 设定端 可以 设定键,  比如 设定端 是  “00”,   则 输入端 输入 “00” 时,  最上方 的 “与门” 输出 1 ,  “Value 存储单元” 接通, 可以读取数据, 读取到的就是 键 对应的 值 。 输入端 输入 非 “00” 的 其它 值 时,  与门 输出 0,  “Value 存储单元” 不接通,  不能读取数据 。

    又比如 设定端 是  “01”,   则 输入端 输入 “01” 时,  最上方 的 “与门” 输出 1 ,  “Value 存储单元” 接通, 可以读取数据, 读取到的就是 键 对应的 值 。 输入端 输入 非 “01” 的 其它 值 时,  与门 输出 0,  “Value 存储单元” 不接通,  不能读取数据 。

    这就实现了一个 字典单元,

    我们把 若干个 字典单元 并联起来(按引脚并联), 即 设定端 的 引脚 1 和 引脚 1 并联, 引脚 2 和 引脚 2 并联 ……  输入端, 输出端 亦然 。

    这样 就 组成了一个 字典, 或者说 字典阵列, 就像 内存 的 一组 存储单元 一样 。

    n 个 字典单元 组成 的 字典阵列 可以 存放 n 个 键值对 。

    哎 ?   等,,,  说到   “阵列”  ,  如果 设定端 在 断电 的 情况下 也能 保存 设定值,  那这岂不就成了   “可编程逻辑阵列”    了嘛  ~!

     

  • 相关阅读:
    PL/SQL Developer使用技巧、快捷键(转发)
    Java 获取随机日期
    jsonArray和Java List对象互转,日期处理
    ExtJs grid单选,多选
    ExtJs 下拉单联动,次级下拉框查询模式
    ExtJs 日期相加,Grid表格列可编辑
    转:Java阳历转农历
    转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式
    钥匙计数之一
    LianLianKan
  • 原文地址:https://www.cnblogs.com/KSongKing/p/10193128.html
Copyright © 2011-2022 走看看