twitter: archive 2083757874686161259 (NOTimothyLottes left-justified fixed point)

This commit is contained in:
ed
2026-08-02 00:36:30 -04:00
parent 5c6826c263
commit 8c03bc374f
7 changed files with 282 additions and 2 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,73 @@
← [Back to Twitter thread index](../README.md)
---
title: "Re-FPGA-land ALUs - I'm firmly distracted by an alternative history of the unexp"
author: "NOTimothyLottes"
handle: "@NOTimothyLottes"
post_url: "https://x.com/NOTimothyLottes/status/2083757874686161259"
post_id: "2083757874686161259"
timestamp: "2026-08-02 03:32:46"
post_count: 12
reply_count: 1
repost_count: 2
like_count: 4
view_count: 158
---
# @NOTimothyLottes — Re-FPGA-land ALUs - I'm firmly distracted by an alternative history of the unexp
## Post 1 (2026-08-02 03:32:46)
Re-FPGA-land ALUs - I'm firmly distracted by an alternative history of the unexplored left justified extreme fixed point. Where signed integer numbers represent {-1.0 to <1.0}. Where the primary IMAD op includes a huge fixed signed right shift ...
## Post 2 (2026-08-02 03:35:40) — reply to Post 1
For those planted in the right-justified current fixed point timeline, your bytes get loaded into the LSBs, and your addressing uses the LSBs. The idea of doing the reverse of this is probably completely alien -> loading smaller bit types into the MSBs first ...
## Post 3 (2026-08-02 03:38:00) — reply to Post 2
Meaning standard integer thinking is to start with small things like an index and scale that by the stride into a larger number. But with what I'm suggesting you start with something large and instead make it smaller.
## Post 4 (2026-08-02 03:47:30) — reply to Post 3
In a traditional right-justified CPU, you'd have three ops {MUL, ADD, SHR} which could be reduced to {IMAD, SHR}, but would be just one op on a left justified machine. Meaning doing 'fixed point' stuff is a bit faster.
## Post 5 (2026-08-02 03:51:35) — reply to Post 4
32-bit left justified machine, can easily leverage say a 18-bit * 25-bit multiplier (Xlinix DSP) because the MSBs are always fed in, and the useful MSBs are always pulled out of the accumulator (P). Right justified machines really need that full 32-bit x 32-bit MUL
## Post 6 (2026-08-02 03:57:09) — reply to Post 5
Left justified variable bit-width loads make a lot more sense, partly because the LSBs index into bits (or sub-bits depending on mapping) effectively (instead of bytes), and one can do {4/8/16/32-bit} extraction with 8 SLICES and one CLB deep [a lot easier than right-justified]
![Media 1](./media/2083764013570093330_1.png)
## Post 7 (2026-08-02 04:04:39) — reply to Post 6
The core normalized IMAD can easily be made -/+ symmetrical simply by feeding in truncated LSBs of the add operand with simple logic based on MSBs of mul operands. In the example below the {-4} represents {-1.0}. Of course -4*-4 overflows to -4 [2's comp]
![Media 1](./media/2083765900436492692_1.png)
## Post 8 (2026-08-02 04:08:27) — reply to Post 7
Predicate/bool logic becomes {0.0, -1.0} based, can leverage {a+b} wrap around to implement XOR, and -(a*b) to implement AND.
![Media 1](./media/2083766854980383071_1.png)
## Post 9 (2026-08-02 04:13:31) — reply to Post 8
Doing a "perspective divide" {s=x/z} can be transformed into a scaled perspective divide {s=x*(a/z)} to work around the {-1.0 to <1.0} range limitation. And one can transform the divide into a binary search for 's' - specifically largest 's' where {s*z<=x*a}
![Media 1](./media/2083768129658765655_1.png)
## Post 10 (2026-08-02 04:16:23) — reply to Post 9
Notice this binary search test takes just one IMAD {s*z+t} where t=-x*a. Meaning a smart machine can do a test step in 2 ops on a DSP (one IMAD for the test, the next to ADD to 's' for the next search step) ...
## Post 11 (2026-08-02 04:18:24) — reply to Post 10
Which requires the opcode ISA to have a latched delayed write to the register file that is conditional on the sign bit of a later IMAD op. This can make binary search for things like sqrt(x) also just as fast.
## Post 12 (2026-08-02 04:28:45) — reply to Post 11
I think there are ways to transcend typical integer machine IPCs by having uber ops in the ISA (this left-justified machine has a 1-clock {MUL,ADD,SHIFT,+ signed conditional register STORE,+ extra modifiers (like NOT)}. But still have extremely simple implementations.
@@ -0,0 +1,206 @@
{
"root_post_id": "2083757874686161259",
"posts": [
{
"post_id": "2083757874686161259",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Re-FPGA-land ALUs - I'm firmly distracted by an alternative history of the unexplored left justified extreme fixed point. Where signed integer numbers represent {-1.0 to <1.0}. Where the primary IMAD op includes a huge fixed signed right shift ...",
"timestamp": "2026-08-02 03:32:46",
"media_urls": [],
"reply_to_id": null,
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 2,
"like_count": 4,
"view_count": 158
}
},
{
"post_id": "2083758603945513244",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "For those planted in the right-justified current fixed point timeline, your bytes get loaded into the LSBs, and your addressing uses the LSBs. The idea of doing the reverse of this is probably completely alien -> loading smaller bit types into the MSBs first ...",
"timestamp": "2026-08-02 03:35:40",
"media_urls": [],
"reply_to_id": "2083757874686161259",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 2,
"view_count": 70
}
},
{
"post_id": "2083759192721043871",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Meaning standard integer thinking is to start with small things like an index and scale that by the stride into a larger number. But with what I'm suggesting you start with something large and instead make it smaller.",
"timestamp": "2026-08-02 03:38:00",
"media_urls": [],
"reply_to_id": "2083758603945513244",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 1,
"view_count": 55
}
},
{
"post_id": "2083761583776301374",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "In a traditional right-justified CPU, you'd have three ops {MUL, ADD, SHR} which could be reduced to {IMAD, SHR}, but would be just one op on a left justified machine. Meaning doing 'fixed point' stuff is a bit faster.",
"timestamp": "2026-08-02 03:47:30",
"media_urls": [],
"reply_to_id": "2083759192721043871",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 21
}
},
{
"post_id": "2083762609094889861",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "32-bit left justified machine, can easily leverage say a 18-bit * 25-bit multiplier (Xlinix DSP) because the MSBs are always fed in, and the useful MSBs are always pulled out of the accumulator (P). Right justified machines really need that full 32-bit x 32-bit MUL",
"timestamp": "2026-08-02 03:51:35",
"media_urls": [],
"reply_to_id": "2083761583776301374",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 1,
"view_count": 29
}
},
{
"post_id": "2083764013570093330",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Left justified variable bit-width loads make a lot more sense, partly because the LSBs index into bits (or sub-bits depending on mapping) effectively (instead of bytes), and one can do {4/8/16/32-bit} extraction with 8 SLICES and one CLB deep [a lot easier than right-justified]",
"timestamp": "2026-08-02 03:57:09",
"media_urls": [
"https://pbs.twimg.com/media/HOsENEBXEAAoWlx?format=png&name=orig"
],
"reply_to_id": "2083762609094889861",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 21
}
},
{
"post_id": "2083765900436492692",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "The core normalized IMAD can easily be made -/+ symmetrical simply by feeding in truncated LSBs of the add operand with simple logic based on MSBs of mul operands. In the example below the {-4} represents {-1.0}. Of course -4*-4 overflows to -4 [2's comp]",
"timestamp": "2026-08-02 04:04:39",
"media_urls": [
"https://pbs.twimg.com/media/HOsFs-nWAAAUlTy?format=png&name=orig"
],
"reply_to_id": "2083764013570093330",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 19
}
},
{
"post_id": "2083766854980383071",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Predicate/bool logic becomes {0.0, -1.0} based, can leverage {a+b} wrap around to implement XOR, and -(a*b) to implement AND.",
"timestamp": "2026-08-02 04:08:27",
"media_urls": [
"https://pbs.twimg.com/media/HOsG3VBXAAA92kz?format=png&name=orig"
],
"reply_to_id": "2083765900436492692",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 18
}
},
{
"post_id": "2083768129658765655",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Doing a \"perspective divide\" {s=x/z} can be transformed into a scaled perspective divide {s=x*(a/z)} to work around the {-1.0 to <1.0} range limitation. And one can transform the divide into a binary search for 's' - specifically largest 's' where {s*z<=x*a}",
"timestamp": "2026-08-02 04:13:31",
"media_urls": [
"https://pbs.twimg.com/media/HOsIBCBWcAA79PL?format=png&name=orig"
],
"reply_to_id": "2083766854980383071",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 1,
"view_count": 14
}
},
{
"post_id": "2083768853499203838",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Notice this binary search test takes just one IMAD {s*z+t} where t=-x*a. Meaning a smart machine can do a test step in 2 ops on a DSP (one IMAD for the test, the next to ADD to 's' for the next search step) ...",
"timestamp": "2026-08-02 04:16:23",
"media_urls": [],
"reply_to_id": "2083768129658765655",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 21
}
},
{
"post_id": "2083769357906133502",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Which requires the opcode ISA to have a latched delayed write to the register file that is conditional on the sign bit of a later IMAD op. This can make binary search for things like sqrt(x) also just as fast.",
"timestamp": "2026-08-02 04:18:24",
"media_urls": [],
"reply_to_id": "2083768853499203838",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 22
}
},
{
"post_id": "2083771965278388689",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "I think there are ways to transcend typical integer machine IPCs by having uber ops in the ISA (this left-justified machine has a 1-clock {MUL,ADD,SHIFT,+ signed conditional register STORE,+ extra modifiers (like NOT)}. But still have extremely simple implementations.",
"timestamp": "2026-08-02 04:28:45",
"media_urls": [],
"reply_to_id": "2083769357906133502",
"quote_of_id": null,
"metrics": {
"reply_count": 0,
"repost_count": 0,
"like_count": 0,
"view_count": 12
}
}
],
"source_url": "https://x.com/NOTimothyLottes/status/2083757874686161259"
}
+3 -2
View File
@@ -4,13 +4,14 @@ Index of all scraped Twitter/X threads. Each row links to a per-thread `thread.m
with the original post text + media; every `thread.md` has a back-link to this index
at the top.
**Total: 81 threads across 3 authors.** Threads are grouped by
**Total: 82 threads across 3 authors.** Threads are grouped by
author; within each group, newest first.
## @NOTimothyLottes (78)
## @NOTimothyLottes (79)
| Date | Author | Title |
| --- | --- | --- |
| 2026-08-02 | [@NOTimothyLottes](https://x.com/NOTimothyLottes/status/2083757874686161259) | [Re-FPGA-land ALUs - I'm firmly distracted by an alternative history of the unexp](./2083757874686161259/thread.md) |
| 2026-07-22 | [@NOTimothyLottes](https://x.com/NOTimothyLottes/status/2079746130309415185) | [A language that you author in a compressed space directly. So Whitney-esk in usi](./2079746130309415185/thread.md) |
| 2026-07-19 | [@NOTimothyLottes](https://x.com/NOTimothyLottes/status/2078729662021111958) | [The aim of course, keep the stuff that doesn't need to go fast optimized instead](./2078729662021111958/thread.md) |
| 2026-07-18 | [@NOTimothyLottes](https://x.com/NOTimothyLottes/status/2078349730204078527) | [I realized at some point I can have most interpreted forth-style words in an ali](./2078349730204078527/thread.md) |