|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
1-битный процессор микрокода на эмиттерно-связанной логике?
Author |
Message |
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Да, видел такую. Но у меня проблема выглядит непонятной ещё в плане того, что есть разные "классы" соединений: логика же "трёхэтажная", в ней используются три уровня напряжений. "Верхний" выход может управлять более "нижним" на одну ступень входом, но ни как иначе. Плюс, есть конвертеры напряжений из "нижних" в "верхние" Пока ещё не понимаю как и куда нужно вставить информацию об этих типах входов-выходов. Ситуация явно нестандартная. Возможно, нужно делать библиотеку своих готовых элементов или как-то так.
Last edited by belfegor96 on 22 Sep 2023 01:47, edited 1 time in total.
|
21 Sep 2023 02:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23357 Location: Silicon Valley
|
Ну видимо свой "techmapping" надо писать
|
21 Sep 2023 08:18 |
|
|
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Не, не взлетит: Here are some of the basics of a techmap transformation Verilog module: a techmap transformation only operates on a single design cell. You can not use techmap to perform multi-cell optimizations such mapping a $mul followed by an $add onto an FPGA DSP has multiply-accumulator support. На крайний случай, процессор небольшой получается, можно после того как дизайн заработает пройтись по нему и руками заменить гейты на составные, и потом верифицировать.
|
22 Sep 2023 17:37 |
|
|
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Придумал как вкрячить в АЛУ сдвиг вправо, чтобы не делать отдельное устройство Изначально я для выбора текущей операции АЛУ вместо логики на AND (как в микросхеме 74181) сделал в логической схеме сумматора мультиплексор на 4 входа (см. картинку) - просто так понятнее: берём сигналы с generate, propagate и с AND между ними и переключаем их. А ещё была надежда что выходной XNOR (который из 2-х гейтов состоит на самом деле: ~(A ^ B)) как в 74181 в DCTL удастся заменить на какой-то более дешёвый DCTL-трюк (не удалось) и поэтому оставил пока более понятный мультиплексор. В результате остался один неиспользованный вход этого мультиплексора. А ведь его можно использовать для того чтобы отдать правый бит от текущего бита операнда напрямую на выход. Получается почти бесплатное устройство битового сдвига вправо! Оно будет дешевле чем отдельное устройство сдвига и XNORы на каждый бит как в обычном АЛУ. | | | | Code: typedef enum logic[4:0] { ADD =5'b00000, // also left shift if A=B, AKA SLL SUB =5'b11000, // carry_out is inverted for SUB operations XOR =5'bx0100, XNOR =5'bx1100, // also NOT, if A=0 COMP =5'b01000, // A-B-1 operation, if A!=B then established carry out bit means A>B, otherwise A<B AND =5'bx0101, OR =5'bx0110, RSHFT=5'b00111 // moves data2 bits to right (SLR), data1 is ignored } AluCmd;
typedef struct packed { logic carry_in; // carry input (for example, from prev stage) logic b_inv; // invert second operand? logic carry_disable; logic[1:0] cmd; // cmd for full adder mux switch } AluCtrlInternal;
typedef union packed { AluCmd cmd; AluCtrlInternal ctrl; } AluCtrl;
module alu ( input[3:0] d1, input[3:0] d2, input AluCtrl ctrl, output[3:0] res, output carry_out );
wire[3:0] gen; wire[3:0] propagate; wire[3:0] d2_possible_inverted; wire[4:0] carry;
wire carry_in = ctrl.ctrl.carry_in; assign carry[0] = carry_in; assign carry_out = carry[4];
for(genvar i = 0; i < 4; i++) begin wire right_bit = (i < 3) ? d2_possible_inverted[i+1] : carry_in;
full_adder fa(d1[i], d2[i], carry[i], right_bit, ctrl, res[i], gen[i], propagate[i], d2_possible_inverted[i]); end
assign carry[1] = gen[0] || (carry_in && propagate[0]);
assign carry[2] = gen[1] || ( (carry_in && propagate[0] && propagate[1]) || (gen[0] && propagate[1]) );
assign carry[3] = gen[2] || ( (carry_in && propagate[0] && propagate[1] && propagate[2]) || (gen[0] && propagate[1] && propagate[2]) || (gen[1] && propagate[2]) );
assign carry[4] = gen[3] || ( (carry_in && propagate[0] && propagate[1] && propagate[2] && propagate[3]) || (gen[0] && propagate[1] && propagate[2] && propagate[3]) || (gen[1] && propagate[2] && propagate[3]) || (gen[2] && propagate[3]) ); endmodule
module full_adder ( input data1, data2, carry_in, direct_in /*can be bypassed to output*/, input AluCtrlInternal ctrl, output ret, gen, propagate, d2_possible_inverted );
assign d2_possible_inverted = data2 ^ ctrl.b_inv; // optionally inverts data2 wire carry = carry_in & ~ctrl.carry_disable;
assign gen = data1 & d2_possible_inverted; assign propagate = data1 | d2_possible_inverted;
wire i; AND_gate_with_mux mux(gen, propagate, direct_in, ctrl.cmd, i);
assign ret = i ^ carry; endmodule
// MUX used here to utilize 3-level DCTL logic module AND_gate_with_mux ( input from_AND, from_OR, direct_in, input[1:0] ctrl, output result );
wire interm = ~from_AND & from_OR; mux_4to1 m(result, interm, from_AND, from_OR, direct_in, ctrl);
endmodule
module mux_4to1 ( output r, input a, input b, input c, input d, input[1:0] sel );
assign r = sel[1] ? (sel[0] ? d : c) : (sel[0] ? b : a); endmodule
| | | | |
|
23 Sep 2023 06:34 |
|
|
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Нашлось! Существует Liberty User Guides and Reference Manual Suite Version 2017.06 (может и новее есть, но не нагуглилось). Там описан формат Liberty для описания характеристик (временных, например) гейтов, мультиплексоров и всего прочего необходимого. И там есть всякое про Multivoltage Design, в том числе Cell-Level Attributes. Видимо, по понятным причинам, это всё редко используется в FPGA, потому и запрятано. Проблема в том что в репозиториях YosysHQ слово "input_voltage_range" вообще не встречается...
|
05 Nov 2023 02:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23357 Location: Silicon Valley
|
Это не то что редко используется в FPGA - это НИКАК не используется в FPGA, т.к. FPGA это сугубо двоичный дизайн ВСЕГДА - в mixed они уходят по входам-выходам разве что - вот там можно разные логические уровни подавать на разные ноги, однако там всё равно всё двоичное - будь то 5V-толерант или 3.3V или 1.8V - всё равно есть порог выше которого "1", а ниже которого "0"...
|
05 Nov 2023 12:43 |
|
|
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Я живой и потихоньку делаю модель на SystemVerilog. Скоро она сможет jump и можно будет тестовые программы гонять
|
18 Dec 2023 14:04 |
|
|
belfegor96
Fanat
Joined: 09 Jun 2022 00:49 Posts: 83
|
Я живой. Все команды реализовал, надо ещё регистровый файл сделать и минимально юзабельную поддержку прерываний
Обмазываюсь инфой о прерываниях - ранее никогда с ними не сталкивался на таком низком уровне
|
31 Jul 2024 17:11 |
|
|
Who is online |
Users browsing this forum: No registered users and 1 guest |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|