Adv. Verilog Parametric Code Snippets

Who needs those fangled Scala-HDLs, when they can use generate in Verilog2001.

— Sun Tzu

TOC / Nov.25.2021

  1. Parallel Combinational Maxima Function
  2. SAR Controller
  3. CLA
  4. Combinational Leading Zero Counter
  5. Barrel Shifter

Key Points:

  • Recursion is possible
  • Functional programming mindset helps (dig up your copy of SICP!)
  • Use the netlist optimization functionality of your toolchain effectively (we can safely assume that all unused outputs, and all constant inputs can be optimized-out post synthesis)

Continue reading “Adv. Verilog Parametric Code Snippets”

计算器里的开关电源 / The 2-BJT SMPS in an HP Calculator

For now this article is not available in english. It seems that Google Translate does a reasonable job translating this write-up into English. Please give it a try if you’re interested.

对于我这代人来说,计算器属于“在远古时期就已经成熟的科技”。在我接触计算器的时候,各大厂商早已迈过了技术攻坚的阶段,所有设计目标仅仅是为了抢占市场和极限的cost-down服务。

人类在电子技术上取得的巨大成就令人叹为观止:LCD,LCD驱动器和超低功耗CMOS技术已经如此的成熟,以至于即便使用光效非常低的廉价太阳能电池板,在将大半能量浪费在包括线性稳压,Biasing在内的各类无关的环节的前提下,这些计算器仍然能够在昏暗的环境中正常工作。

70年代的设计师如果看到现代的计算器,不知道会发出怎样的感叹呢?对于70年代的计算器而言,这样的设计是无比奢侈的,甚至不切实际。在70年代,距离LCD技术成熟还有十年以上的时间差。在70年代想要做一台计算器的话,可供选择的显示器件有:

名称发光机理典型工作条件(1980年以前)型号
Nixie
辉光管
惰性气体辉光放电180V 36uA/seg
6.4mW/seg
SP-330
VFD
荧光管
阴极射线-磷光体发光

20V 30uA/seg + 灯丝供电
~0.6mW/seg

+200mW

Futaba
14-ST-62AI
LED
发光二极管
载流子复合8.2V ~250uA/seg
2.1mW/seg
HP55

通过这张表可以看出,70年代的电子工程师想要设计一个省电的计算器是非常困难的:每一种显示技术都需要较高的电压,还需要在此基础上加入驱动电路的电压裕量,在70年代这个裕量可能达到1V以上。有时为了取得更好的效果,更长的寿命或更高的效率,还需要十分复杂的电路去驱动,消耗了更高的电压裕量……在这样的条件下,使用开关电源并不是锦上添花,而是在当时的技术限制下的无奈之举。

Continue reading “计算器里的开关电源 / The 2-BJT SMPS in an HP Calculator”

HP5430A 18GHz微波计数器维修+测试 / Microwave Counter Repair+Testing

这其实是2019年11月完成的事情,当时拍了一些照片记录,不过因为拍摄环境限制拍得不是很好,就没发出来。最近本科快毕业了,在考虑离开学校的事情,整理了一下自己在学校外租的,专门用来当实验室(事实上更像是仓库)的出租屋。这台仪器作为所有收集到的仪器中个人最喜欢的一台,作为一个纪念,还是发出来了。

Continue reading “HP5430A 18GHz微波计数器维修+测试 / Microwave Counter Repair+Testing”

强行逆向HP35 ARC芯片版图的一个部分的尝试 – 全过程记录

9年前,Peter Monta拍摄了一台HP35中ROM和ARC这两个芯片的版图,并通过直接记录版图上的图形的方法人工读出了HP35的ROM内容,这为模拟器社区提供了重要的素材。这些芯片的高清照片被发表在pmonta.com上。自一年前看到它我就非常想尝试逆向它,但是因为当时的知识水平限制没能做到。今天在积累了一定相关知识后我进行了尝试,最后的结果基本还是正确的,不过现在只能在这里记录我的方法,至于实际将这个芯片逆向成网表这种工作因为时间关系暂时没法做,希望未来什么时候能闲到把它逆向完…

图1. ARC照片的缩略图,原图见pmonta.com,有6919 x 8327

在70年代早期,因为钠离子沾染问题,NMOS很难制造出来,于是当时的数字芯片普遍是PMOS工艺。再加上这个计算器使用的是负逻辑,很容易判断这一定是一个PMOS芯片。

可惜我对PMOS工艺的了解完全是0,资料也几乎没法找到。在刚刚决定开始做逆向时我做的非常痛苦,因为相比于前一个结构非常清晰的CMOS,这个PMOS芯片没有任何标识:掺杂区、过孔、多晶硅长的完全一样,这几乎让我放弃了逆向,但考虑到pmonta.com上,站长已经发了他对ROM的逻辑部分的逆向结果,我觉得自己只要“Try Hard Enough”,总是能看明白的。在尝试了超过6个小时后我终于完全明白了这个芯片的工艺,我将我的探索过程发在这里。

Continue reading “强行逆向HP35 ARC芯片版图的一个部分的尝试 – 全过程记录”

分享一个有趣的芯片逆向练习,以及我自己的解法

自以前就对芯片的逆向非常感兴趣,最早是看Ken Shirriff在他的博客righto.com发的文章入的坑,学了一点芯片逆向的知识,算是从课本往实际实现靠近了一点,后来经常在zeptobars.com看晶圆照片洗眼。但是即便如此,我的知识只能是纸上谈兵,实际的电路分析还是从来没做过,今天逛Siliconpr0n.org时看到他给出了一个小练习题,我才算是第一次尝试做逆向。

将每个晶体管的结构对应到实际的照片上完全不是一个直观的过程,尤其是在完全不知道管脚排布和功能的前提下。在做完后和Siliconpr0n的页面上提供的解答对比了一下,大体上是正确的,我将我探索的过程po在了后面,希望能给出一些参考。

QUIZ (src)

(点击看大图)

原题如此,文件名:“Metal Gate_CMOS”,作者还补充道:“关于文件名里的Metal Gate,我应该是误解了,但它确实是个CMOS”(换句话说这不是Metal Gate)除此之外无附加信息

=== 点开就剧透 ===
Continue reading “分享一个有趣的芯片逆向练习,以及我自己的解法”

[Brushless] LAN1902 – 线性卡尔曼滤波器

注:本来打算一篇里写完,后来发现不知不觉写的太长,还是选择分P了。扩展卡尔曼和无迹卡尔曼的部分下一篇再写,至于实际应用先鸽着,,,

Continue reading “[Brushless] LAN1902 – 线性卡尔曼滤波器”

[OPNA] An Analysis of The P.M.D. Music Data Format (Mostly the “Rhythm” Section)

Greetings to all the new comers.

This article is based on Github repo: ValleyBell/MidiConvertes and Mistydemeo/Pmdmini. Special thanks to オップナー2608 from PC-9800 Series Central Discord Channel for helping me.

Meh… a detailed description of this little project will be covered in a future article (If I actually would do). Basically, I’m trying to make a portable music player / midi synth based around YM2608. I expect this project to take forever to complete…orz

Let’s get our hands dirty quick!

Continue reading “[OPNA] An Analysis of The P.M.D. Music Data Format (Mostly the “Rhythm” Section)”

HDSP2000点屏

占着坑,这周末把它写了,下周直接拿去水数字系统课作业((

前言

简单来说动机是这样的:这学期我们有一门数字系统设计的课:每个人发了FPGA实验板子(Ego1 ,芯片是Aritx7系列的),结合实验一起讲Verilog语言。不幸的,我们班80多人,只有我一个没有领到板子。那我就有理由好好用一把自己吃灰已久的XUPV5了不是(x

此前做过一些FPGA开发,也一直停留在做超小系统的级别(比如那个至今没时间填完坑的HP35复刻)。我意识到自己的问题不是说不会用还是怎么的,主要是懒和过度担心,有些时候有些问题明明是安静写那么一段时间就能写出来的,我却经常选择回避或者单纯的kill time,不干正事。现在我感觉有必要给自己找些小模块,花几个小时硬逼自己一个一个一口气不中断地写完,作为练习。

这次我们留了一个作业,基本还是在教同学们怎么用case写查找表,最终来驱动一组段码LED。我的开发板上并没有段码LED,而且我觉得如果我也做一个段码LED那就太无聊了,不如设计一个比较精致的HP字符LED屏控制器,然后再画一个PCB,做成XUPV5上那个LCD模块的形状,将它替代掉?

Continue reading “HDSP2000点屏”

HP35: A Bit-Serial Wonder – 2. Bit What?

Part2. Bit What?

This article is about the “bit-serial” design scheme employed in HP35’s digital design.

[Status: Proofreading]

Continue reading “HP35: A Bit-Serial Wonder – 2. Bit What?”

HP35: A Bit-Serial Wonder – 1. Introduction

Part1. Introduction

In this section, we will have a brief look at the ISA of the HP35, the first look into the system.

Continue reading “HP35: A Bit-Serial Wonder – 1. Introduction”