极说・当JSON 遇到IC 设计
Posted ICGeek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极说・当JSON 遇到IC 设计相关的知识,希望对你有一定的参考价值。
差劲的程序员操心代码,优秀的程序员操心数据结构和它们之间的关系。一方面规范化,流程化,自动化的观念在IC 工程实践中越来越深入人心,另一方面写代码的ICer 由于惯用的语言不同,编码风格不同导致阅读,使用,维护其他人的代码成本过高,一言不合就自己重写一个。如果你也曾经历这样的困扰,不妨参与下本期话题讨论,当JSON 遇到IC 设计。
阅读本文,您将了解
JSON 是什么
各大编程语言对JSON 的支持
JSON 在IC 设计的工程实践中有哪些应用场景
JSON 格式预检查器
☞ JSON 是什么?
2002年的某一天,道格拉斯·克罗克福特(Douglas Crockford)同学发明了JSON这种超轻量级的数据交换格式。JSON是javascript Object Notation的缩写,道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。
后来,因为实在太过好用,迅速在其他类语言当中普及开来,几乎所有编程语言都有解析JSON的库,形成一种数据交换格式的标准(有人说是配置文件的标准),anyway.
既然谈到数据交换格式,必然需要了解它所能支持的数据类型。(以下内容节选自阮一峰的博客,因为论述的十分经典,本文直接引用)
在Yaml 的文档上关于数据类型的定义,有一段极为经典的解释:
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
并列的数据之间用逗号(", ")分隔。
映射用冒号(": ")表示。
并列数据的集合(数组)用方括号("[]")表示。
映射的集合(对象)用大括号("{}")表示。
上面四条规则,就是Json格式的所有内容。
举个栗子,关于个人信息的描述,写成JSON格式如下:
{ "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 27, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" }, { "type": "mobile", "number": "123 456-7890" } ], "children": [], "spouse": null}
☞ 各大编程语言对JSON 的支持
在php 5.2 及以上版本已经内置JSON 扩展,常用的函数有三个
json_encode : 对变量进行JSON 编码
json_decode : 对JSON 格式的字符串进行解码,转换为PHP 变量
json_last_error : 返回最后发生的错误
Python
使用JSON 函数需要导入json 库: import json
json.dumps : 将Python 对象编码成JSON 字符串
json.loads : 将已编码的JSON 字符串解码为Python 对象
同时,安利一个大数据处理的库:import ijson
详细用法请自行查阅官网 https://pypi.org/project/ijson/
Tcl
Tcllib JSON module 提供了JSON 的parser 和generator, 分别是 namespace ::json 和::json::write
所用的函数为json2prettydict 和dict2json
详细用法请自行查阅官网 https://wiki.tcl.tk/40053
其他语言不再一一列举,至此,大家可以有个overview ,JSON 作为一种超轻量级的数据交换格式可以在不同语言,不同应用,不同程序间承担共享配置及信息交换接口的作用。
当然,能够承担这一作用的数据格式还有其他,譬如xml, yaml, 对ICer 而言tcl dict 也是常用的选择。各自的优缺点及适用场景可以单独写一篇文章论述,本文不再一一列举。
JSON 自身的优点大致如下,轻量级,规范非常简单,可读性好,应用广泛,各类语言支持力度比较大。
☞ JSON 在IC 设计的工程实践中有哪些应用场景
为方便大家有一个更直观的概念,这里结合JSON 在IC 设计的工程实践中的应用场景举几个例子。
玩转路径结构
从已知的路径结构中提取出JSON 配置,最简单的tree -J 就可以做,复杂一点的如何实现?反过来呢,如何基于JSON 配置生成项目的路径结构?
基于JSON 的ASIC 流程配置
{ "name": "ASIC Design Flow", "tools": [ { ... }, "options": [ { ... } ] }, ], "stages": [ { ... }, "inputs": { ... }, "outputs": { ... }, "flow-control": [ ... }, ... }
分布式嵌入系统的片间通讯
{ "ML505": { "FPGA": "XC5VLX50T-1FF1136", "Eth": [{ "PHY-Int": "GMII", "Device": "MARVEL_88E1111", "Address": "0x74" }] }, "KC705": { "FPGA": "XC7K325T-2FFG900C", "Eth": [{ "PHY-Int": "GMII", "Device": "MARVEL_88E1111", "Address": "0x74" }], "IIC": [{ "Type": "Switch", "Adr": "0x85", "Devices": [{ "Name": "Si570", "Address": "0x3A" }] }] } }
memory discription, 用于自定义memory compiler
pad location,用于PR team 和封装team 联调确认PAD 及window 坐标,如果final 交付的文档不是基于excel 而是web管理,JSON 也是个不错的选择。
signoff criteria,用于管理STA流程
可以用数据库做管理,推送到用户时候生成json
将issue track 系统通过web 服务与版本管理系统关联
将更多的IC 工程管理工具通过接口关联,实现整体协同
☞ JSON 格式预检查器
手写的JSON 格式文件在被使用前最好经过格式预检查,以免输入不干净。
在线 http://json-schema.org/
离线
jslint
https://pypi.org/project/jsonschema/
以上是关于极说・当JSON 遇到IC 设计的主要内容,如果未能解决你的问题,请参考以下文章