ddlab
258 subscribers
29 photos
20 files
144 links
Лабораторія цифрового дизайну.
Цифрова схемотехніка, Verilog/VHDL українською.
Download Telegram
Знов з рибу гроші або до квізу в п’ятницю.

Відповідь, що стоїть у квізі можливо дещо бентежить, але це дійсно правильна відповідь.
Нижче скрін з EdaPlayground, в якому саме цей код був запущений та відкомпільований за допомогою QuestaSim 2024.3.
Це та ситуація, коли в стандарті явно нічого не сказано, але всі з досвіду знають, що воно так буде. Про роботу з сигналами різної розрядності раджу уважно почитати та зробити приклади і відкомпілювати книгу Sutherland, Stuart, and Don Mills. 2007. Verilog and System Verilog Gotchas: 101 Common Coding Errors and How to Avoid Them. New York: Springer.
Конкретно в цій ситуації треба читати Gotcha 45 та 46.
Або дивіться відео де розповідається саме про ці ситуації - https://youtu.be/bxCC2_UsV6c
Якщо ліниво дивитись і відео – слайд про це теж нижче.
👍4🔥1
🔥1
Слава Україні!
Alex Forencich і його бібліотека компонентів.
Якщо ви досі в неї не заглядали – то це саме той самий момент подивитись на якісну і велику бібліотеку компонентів модулів, написану на Verilog і тестами, написаними на MyHDL.
В основному там модулі для AXI bus, але їх багато – синхронне FIFO, двохпортова пам'ять, звичайна оперативна пам'ять, блоки прямого доступу до пам’яті і багато іншого.
Раджу для перегляду.
Сайт - https://alexforencich.com/wiki/en/start - в основному не цікавий
GitHub - https://alexforencich.com/wiki/en/start - це саме те, що треба
YouTube - https://www.youtube.com/c/alexforencich – зараз більшою частиною трансляції про те, як робиться проект Corundum - open-source, high-performance FPGA-based NIC and platform for in-network compute. Сам цей проект тут - https://github.com/corundum/corundum

#GitHub
🔥6👍2
П'ятничний тест.

Маємо такий код. У операторі IF в дужках при розрахунку умови при використанні вектора треба використовувати “=” чи “==”?
module test; 
reg [3:0] A;
reg Y;

initial begin
A = 4'b1010;
#1;
if (A = 4'b0000) begin
Y = 1'b1;
end
else begin
Y = 1'b0;
end
end
endmodule
У операторі IF в дужках при розрахунку умови при використанні вектора треба використовувати “=” чи “==”?
Anonymous Quiz
14%
“=” – бо використовується логічна операція
17%
“==” – бо виконується робота з вектором
7%
“=” – дозволено лише такий оператор
62%
“==” – дозволено лише такий оператор
Частка світового обєму виробництва напівпровідників залежно від країни. Період з 1990 по 2032 рік. Прогноз зроблений по даним 2024 року.
— Частка США значно знизиться — з 37% 1990 року до 14% 2032 року.
— Частка Китаю різко зросте з 0% 1990 року до 21% 2032 року.
— Тайвань та Південна Корея збережуть постійне зростання виробництва напівпровідників, частка Тайваню досягне 16%, а Південної Кореї — 17% до 2032 року.
👍4
Слава Україні!
Черговий п’ятничний ківз.
Є такий код:

module example (
input wire x,
input wire y,
input wire z,
output reg out
);

always @(x or y)
out = x & y | z;

endmodule
Слава Україні!
Вчорашній код – приклад того, як не треба робити.
Для експериментів я брав два варіанти.
1. Код, що був вчора
module example (
input wire x,
input wire y,
input wire z,
output reg out
);

always @(x or y)
out = x & y | z;

endmodule


Quartus в звіті компіляції видав
Warning (10235): Verilog HDL Always Construct warning at example.v(9): variable "z" is read inside the Always Construct but isn't in the Always Construct's Event Control


Потім інтерпретував це як комбінаційну схему і синтезував її
👍1
2. Для симуляції, я зробив тестбенч з такою самою логікою, але додав туди монітор та генерацію сигналів. QuestaSim цей код теж відкомпілювала, але результат був дещо іншим:
`timescale 1ns/1ps

module example;
reg x, y, z;
reg out;

always @(x or y)
out = x & y | z;

initial begin
$monitor("Time = %0t | x = %b, y = %b, z = %b | out = %b",
$time, x, y, z, out);
end

initial begin
x = 0; y = 0; z = 0; #10;
x = 0; y = 1; z = 0; #10;
x = 1; y = 0; z = 0; #10;
x = 1; y = 1; z = 0; #10;
x = 1; y = 1; z = 1; #10;
x = 0; y = 0; z = 1; #10;
z = 0;
#10;
$finish;
end
endmodule



Ось, що було виведено на консоль
# Time = 0 | x = 0, y = 0, z = 0 | out = 0
# Time = 10000 | x = 0, y = 1, z = 0 | out = 0
# Time = 20000 | x = 1, y = 0, z = 0 | out = 0
# Time = 30000 | x = 1, y = 1, z = 0 | out = 1
# Time = 40000 | x = 1, y = 1, z = 1 | out = 1
# Time = 50000 | x = 0, y = 0, z = 1 | out = 1
# Time = 60000 | x = 0, y = 0, z = 0 | out = 1


Якщо ви уважно подивитесь тест, то побачите, що в момент 60 нс змінюється тільки сигнал Z з 1 в 0. Для рівняння x & y | z при X=0, Y=0 такий перехід повинен встановити вихід в 0, але він так і залишився 1. Це говорить про те, що QuestaSim сприймає цей код як опис latch, у якого значення оновлюються при появі 1 в X або Y. Значення Z не запускає блок always і не змінює вихід.
👍2🔥2
Загалом, це цікавий приклад того, як різні інструменти можуть трактувати один і той самий код.
👍1💯1
https://dou.ua/lenta/articles/ukraine-chip-factory-is-real/

Стаття на Dou про плани побудови заводу з виробництва мікросхем.
Експерти заслуговують поваги і дійсно знають тему, про яку розповідають. Тому раджу почитати, технічні речі описання добре. Плани влади - такі наші плани.

P.s. Коментарі на dou як завжди адекватні і дуже позитивні.
4
Студенти принесли і колеги порекомендували, тому ділюся:

https://www.reddit.com/r/FPGA/comments/1ii57ht/hog_tutorial_at_cern_and_on_zoom_11th_march_2025/ :

“We are organising a tutorial for Hog (HDL-on-git) on 11th March 2025 at CERN and on zoom.”


https://cern.ch/hog :

“Hog is a set of Tcl/Shell scripts plus a suitable methodology to handle HDL designs in a git repository.

Hog is included as a git submodule in the HDL repository and allows developers to create the Vivado/PlanAhead/Quartus/Libero project(s) locally and synthesise/implement it or start working on it.

Using Hog will help you to:

- easily and effectively maintain HDL code on git
- ensure that code was not modified before building binary files
- ensure traceability of binary files (even if produced locally)
- work both with Windows and Linux
- reduce code duplication by making it easy to share code among projects
- waste no time to setup Continuous Integration on Gitlab or Github actions on GitHub”
👍4
Тільки що обговорювали з колегою останні новини з фабрик і хто залишився на передньому краї технологічного прогресу.
Так от, новина ще грудня минулого року - TSMC успішно провела пробне виробництво чіпів за 2-нм техпроцесом N2 із виходом робочих чипів 60%. Виробництво буде у цьому році і Apple та Nvidia вже чекають старту промислового використання цього техпроцесу.

https://www.gsmarena.com/iphone_17_pro_to_be_the_first_with_a_chipset_built_on_tsmcs_2nm_process-news-62387.php
👍7
Перепрошую, витер квіз випадково.

Повторюю

Що виведе наступний код у SystemVerilog?

module test;
initial begin
int a = 2, b = 3, c = 1, result;
result = a | b && c;
$display("Result: %d", result);
$stop;
end
endmodule
👀1
Що виведе приклад
Anonymous Quiz
24%
Result: 3
18%
Result: 2
50%
Result: 1
8%
Result: 0
І пояснення зразу

Як SystemVerilog обчислює цей приклад.

Операція:
result = a | b && c;

виконується за правилами пріоритету операторів у SystemVerilog.

Крок 1: Визначення пріоритету операторів
1. Оператор && (логічний AND) має вищий пріоритет, ніж | (побітовий OR).
2. Тому спочатку виконується b && c, а потім результат підставляється в a | ....

Крок 2: Виконання b && c
b = 3; // 3 у двійковій системі: 11₂
c = 1; // 1 у двійковій системі: 01₂

- b && c — це логічний оператор, який повертає 1, оскільки обидва операнди ≠ 0.
- Отже, b && c = 1.

Крок 3: Виконання a | 1
a = 2; // 2 у двійковій системі: 10₂
1 = 1; // 1 у двійковій системі: 01₂

- Побітовий OR (|) виконується так:

10₂ (2)
|01₂ (1)
------
11₂ (1)

- Виходить 1 (а не 3, як можна було б очікувати).

Фінальний результат:
Result: 1

Висновок з прикладу:
- Завжди враховуйте пріоритет операторів у SystemVerilog.
- Логічні оператори (&&, ||) повертають 1-бітні значення, що може змінювати очікуваний результат.
- Якщо потрібний чіткий порядок операцій — використовуйте дужки.
🔥2
Forwarded from Lampa
Чудова новина для open source мікроелектроніки! Efabless постав з попелу у вигляді ChipFoundry!

У березні 2025 року спільнота open source silicon була пригнічена новиною про закриття компанії Efabless, яка була основним гравцем у виготовленні open source мікросхем з використанням SKY130 PDK.

І от учора TinyTapeout повідомили, що Efabless продовжує роботу у вигляді нової компанії ChipFoundry 🎉🎉🎉

Сайт компанії: https://chipfoundry.io

Пропонують той же SKY130 PDK, готову систему-на-кристалі на базі RISC-V для конфігурації і відлагодження вашого дизайну, плюс 15 кв.мм. місця на кристалі для проекту користувача. Вартість 15K$. За 15 кв.мм. це дуже гарна пропозиція!
🔥5