极说・当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格式如下:

☞ 各大编程语言对JSON 的支持

PHP

在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 流程配置

分布式嵌入系统的片间通讯

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/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180830G06ZHC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券