Verilog中,若X不是常数,data[X+ , 8]可以综合

控制芯片分为两大类,

  1. 软件编程的(如单片机,ARM,DSP)
    • 即 通用芯片
    • 单片机,是内部已经被人写好了寄存器,与或非门,外部通过汇编语言转换成机器语言,送到机器内部的逻辑门进行运算
  2. 硬件编程的(如FPGA,CPLD)
    • 硬件实现逻辑,就是给你一堆与或非门,通过编写程序,让这一堆与或非门组合实现逻辑功能

FPGA 与单片机的区别:

  • FPGA是硬件编程,单片机是软件编程 (核心区别)
  • FPGA是用空间换时间,单片机是用时间换空间。
  • FPGA可以并行执行,单片机是顺序执行
  • FPGA是硬件编程,单片机是软件编程

FPGA(现场可编程门阵列)主要是用于VLSI(超大规模集成电路)设计的,主要是数字系统,是一些逻辑电路的模块,通过可编程的布线网络来连接这些逻辑模块(可对硬件进行排列组合),从而实现不同的逻辑功能。

单片机等是通过执行程序来做事的,但FPGA不同,我们用VHDL语言编程,下载后不是让FPGA执行程序,而是通过程序改变FPGA内部电路。使FPGA变成我们设计的那种电路图,C语言等是软件语言,芯片执行的时候是一条条执行,而VHDL是硬件语言,执行的时候是并行的,就是所有的语句块同时执行。VHDL是一种语言,是一种硬件语言,可以编出我们要的电路图。FPGA是一种芯片,里面全是门电路,触发器,通过VHDL程序的要求完成门电路的连接。

fpga和vhdl的关系

fpga和vhdl的关系,就像8051单片机和c语言的关系

VHDL是FPGA编程语言的一种,进行FPGA设计时 首先用VHDL或者Verilog写源代码 ,然后用综合工具将源代码综合成网表,下一步通过布局布线工具(与FPGA具体型号相关)将综合的网表映射到具体型号的FPGA上(包括布局布线,期间加入时序约束,管脚约束),基本就是这么一个流程,一般的大厂商的开发工具都是集成了上述所有的工具,如altera的quartus ,xilinx的ISE 以及actel的libero

ww

都是分布式数据库,节点保存整个数据库。

都存在一个缺陷,节点数据量大。(.git目录很大,比特币的整个链要很多G)

P2P的节点是否需要保存整个数据库?

简介

Bitcoin(以下称比特币)是一个P2P网络,它的客户端有Full Node(全功能客户端)、SPV (Simplified Payment Verification,简化支付验证协议[1],即只支持简化支付验证协议的客户端)。SPV有时也称作Thin Clients, light-weight clients,它们在维基[2]上的页面引用是一样的。

Full Node会下载包含所有交易信息(而不仅仅是区块的headers)的完整区块链,到目前为止,这会要求为它保留145GB以上的磁盘空间,并且还在以每10分钟1M的速度增加着。这些数据将会在交易验证中用到,因此Full Node不容易被欺骗,它们是bitcoin网络中的安全基石。

SPV,或者说Thin Clients,则只会下载整个区块链中所有区块的头信息。正如比特币白皮书:

Bitcoin: A Peer-to-Peer Electronic Cash System(以下简称白皮书)所说,一个区块头大概80字节大小,假设每10分钟生成一个新的区块,那么每年只会产生4.2MB的头信息数据,因此这些信息全部放在内存中都不是问题。然而,在安全性上SPV并不如Full Node那么健壮。

安装Full Node是程序员的不二选择。比特币官网就提供了一个Full Node客户端,称作bitcoin core,有时候也被叫作Satoshi(即“聪”)客户端。如果想看看其它的客户端,包括SPV客户端,

除了比特币的官方钱包外,我们还有其他各种钱包可供选择。

  • Bitcoin-Qt - 基于 C++/Qt 的 Bitcoin 比特币客户端图形化界面,支持 Linux/MacOSX/Windows,全功能。现在作为官方客户端使用,不过有个缺点,就是需要同步数据,超级慢啊。所以就难怪网络上一堆人在那里叫:比特币钱包同步怎么这么慢啊?实在是没法快起来,数据包太大了。如果实在受不了,只想要一个钱包地址的话,那么不妨试试手机客户端或者以下其他几种客户端吧。 下载地址:http://bitcoin.org/en/download

  • MultiBit - 一个安全、轻量级、国际化的 Bitcoin 比特币钱包,支持 Windows、MacOS 和 Linux。MultiBit比特币客户端主要面向非技术用户,目标是为了让普通用户更快更方便的使用比特币。主要特征有“秒同步”(同步速度飞快),客户端可以创建和管理多个钱包,另外每个钱包都可以创建无数个收款地址。唯一的一点不好,选项里面有一个0.001的交易手续费,且不能取消。这是不是意味着,每次付款都要付出至少0.001的手续费呢?小编使用的就是这个客户端,强烈推荐。网站:https://multibit.org/

  • Armory - 是一个开放源代码的钱包客户端。它从一开始就设计用来给大量投资比特币的用户提供最高级别的安全性,同时仍然保持了高度的易用性和便利性。其易于使用和大量先进的功能,使它成为最流行的比特币客户端之一。Armory是基于 Python 的客户端,当前处在 Alpha 测试阶段,Beta 版本由多人资助。网站:https://bitcoinarmory.com/

  • Electrum - 是一个轻量级的、易于使用的比特币客户端,它可以保护你的比特币,避免遭受到因为备份错误或者电脑故障而造成的损失。你的钱包可以从一个秘密的短语中恢复,你可以把这段密语写在纸上或者记在心里。它并不下载比特币的块链数据,所以当你启动客户端时,你会发现不需要等待(众所周知官方客户端启动超慢)。网址:http://electrum.org/

参考

https://zhuanlan.zhihu.com/p/33646408

依赖

包括Boost, openssl , libevent以及QT等等

入口

https://github.com/bitcoin/bitcoin/blob/master/src/bitcoind.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
第一步:设置运行环境;
第二步:连接bitcoind信号处理对象;
第三步:应用程序初始化操作;
第四步:控制台命令传入参数解析;
第五步:解析后参数的处理;
第六步:初始化日志打印;
第七步:初始化参数设置;
第八步:初始化应用程序基本上下文环境;
第九步:应用程序参数设置;
第十步:应用程序完整性检查;
第十一步:应用程序运行主函数;
第十二部:循环等待关闭消息;
第十三步:程序关闭。

参考 https://www.jianshu.com/p/2c2b0c0af659

主要数据结构

比特币在代码中定义许多的类,有些我们在各种文章中经常看到例如

  • 交易(CTransaction),
  • 区块(CBlock),
  • 交易池(CTxMemPool)等等,
    还有些不常见的例如共识(Consensus),脚本(CScript)等等,这些数据结构在代码中随处可见,所以这部分单独拿出来对这些类包含的变量和成员函数进行解释,同时也便于之后的查阅。