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 个 键值对 。

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

设计一个 硬件 实现的 Dictionary(字典)的更多相关文章

  1. 为 .NET Core 设计一个 3D 图形渲染库

    原文地址:https://mellinoe.wordpress.com/2017/02/08/designing-a-3d-rendering-library-for-net-core/ 作者:ERI ...

  2. 你能熟练使用Dictionary字典和List列表吗?(转)

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  3. (转)C#中的Dictionary字典类介绍

    关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-dictionar ...

  4. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

  5. C# Dictionary 字典

    C#中的Dictionary字典类介绍   关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  6. 关于Dictionary字典和List列表

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  7. 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展

    阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...

  8. 深入理解计算机系统(4.2)------逻辑设计和硬件控制语言HCL

    上一篇博客我们简单介绍了Y86指令集体系,而这篇博客我们将介绍指令集体系的逻辑设计和硬件控制语言HCL,为后面去实现Y86打下基础. 在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器 ...

  9. 如何设计一个异步Web服务——任务调度

    接上一篇<如何设计一个异步Web服务——接口部分> Application已经将任务信息发到了Service服务器中,接下来,Service服务器改如何对自身的资源进行合理分配以满足App ...

随机推荐

  1. 浅谈如何正确给table加边框

    一般来说,给表格加边框都会出现不同的问题,以下是给表格加边框后展现比较好的方式 <style> table,table tr th, table tr td { border:1px so ...

  2. Python 基础关于编码

    一.编码的种类: 1 acsic码   基本不用    不同编码之间互用会产生乱码, 2unicode    A 字母  4个字节   00000000 00000000 00100100 01000 ...

  3. [Spring]初识Spring-Spring的基础使用-如何通过Bean来实例化?

    Spring框架的基础使用 XML配置信息,Bean的不同实例化方式,注入 实例化 XML文件中的参数设置 1.通过构造器进行实例化(重点,常用方式) <bean name="aCls ...

  4. Delphi直接实现分享图片功能

    procedure TCustomCameraViewDoc.ShareTextClick(Sender: TObject); var FSharingService: IFMXShareSheetA ...

  5. Python 带有参数的装饰器

    def wrapper_out(flag): # 装饰器本身的参数 def wrapper(fn): # 目标函数 def inner(*args, **kwargs): # 目标函数执行需要的参数 ...

  6. 用Synoptic Panel自定义基于图形的可视化控件--制作一张剧场售票统计报表

    数据可视化的一大特点就是能给报表使用者带来感官上的享受.不再是枯燥的数字,而变成一个一个亮丽的图形.之前业界大神公布过一个统计Car Accidents的报表,这个Power BI Report的特点 ...

  7. idea 新建一个java项目并运行

    这个只能算是个笔记,参考:参考文档 打开Idea,选择create new project,如图 或选择File ——> New——>Project... 出现以下界面,选中Java,然后 ...

  8. linux command1

    #列出指定用户(当前用户)的组信息 groups #将指定的用户添加(-a)到指定的组内(改组必须已经存在)或指定用户从指定的组中删除(-d) gpasswd –a/-d  username grou ...

  9. Linux服务器新建用户和组,并分配sudo权限 (Ubuntu系统)

    新拿到一台服务器后我们一般都是要新建用户组,用户,并为其分配权限. ==================================================== 赋予用户组sudo权限: ...

  10. python调用caffe实现预测

    对于已经训练完成的caffemodel,对于单个的图片预测,用python接口来调用是一件非常方便的事情,下面就来讲述如何用python调用已经训练完成的caffemodel,以及prototxt,网 ...