1. 程式人生 > >Rocket - decode - 最小項與最大項

Rocket - decode - 最小項與最大項

attr for .cn adb span 變量 targe wikipedia pan

https://mp.weixin.qq.com/s/XrBh9Kapj01HdvBi5MkbgA 介紹布爾代數最小項與最大項相關概念,以及Term類的實現。 參考鏈接: https://baike.baidu.com/item/卡諾圖 https://en.wikipedia.org/wiki/Implicant https://en.wikipedia.org/wiki/Canonical_normal_form 1. 幾個定義 ?技術分享圖片? 2. Term ?技術分享圖片? Term即是一個項,最大項或最小項。 由變量ABCD組成的項AB‘,包含如下信息: 1) 項中包含的變量 最小項由ABCD四個變量組成。項AB‘只包含了AB兩個變量。
在Term中,由mask決定項中有哪些變量: a. mask為1的位對應的變量不在項中出現,如變量CD在項AB‘中的mask為1; b. mask為0的位對應的變量在項中出現; 2) 每個變量的值 項中的每個變量或者以原變量的形式出現(如A),或者以補變量的形式出現(如B‘)。 在Term中,值存在如下情況: a. mask為1的變量,即不在項中出現的變量,其值為0; b. mask為0的變量,即在項中出現的變量,其值為0或1; 3) 最大項和最小項 項中每個變量的關系,是與(乘)的關系,還是或(加)的關系;亦即項是最小項,還是最大項。 在Term中,沒有表達這種關系。只表達了變量及其值。至於是最大項還是最小項,取決於如何使用。
如DecodeLogic中,無論是minTerms還是maxTerms都可以傳給Simplify作為minterms參數: ?技術分享圖片? Simplify定義如下: ?技術分享圖片? 3. BitPat與Term BitPat通過term方法,轉變為一個Term。其實現如下: ?技術分享圖片? 因為Term中的mask與BitPat中相反,所以Term中mask為1的位對應的變量是不存在的變量。與BitPat中的意義相反。 這裏再提一下BigInt(2).pow(lit.getWidth) - (lit.mask + 1),其有兩種理解方法: 1) 2的補碼 mask補碼 = 2^n - mask = ~mask + 1
即:~mask = 2^n - mask - 1 = 2^n - (mask + 1) 2) 1的補碼 對mask求1的補碼,即是按位取反,即~mask。 mask與~mask的和為n位全1的值,亦即2^n - 1。 如0101 + 1010 = 1111 = 2^4 - 1 所以:~mask + mask = 2^n - 1 可知:~mask = 2^n - 1 - mask = 2^n - (mask + 1) 其實2的補碼的算法即取反加一,即是利用~mask + mask = 2^n - 1的特性: mask補碼 = 2^n - mask = 2^n - 1 + 1 - mask = (2^n - 1 - mask) + 1 = ~mask + 1.

Rocket - decode - 最小項與最大項