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

Ті, хто відповів що це синтаксична помилка – відповіли так само як і ChatGPT. Нижче буде картинка того, як це компілює Questa.

Загалом про цю незручну ситуацію раджу читати Sutherland, Stuart, and Don Mills. 2007. Verilog and System Verilog Gotchas: 101 Common Coding Errors and How to Avoid Them. New York: Springer.

Або дивіться нудне відео тут: https://youtu.be/bxCC2_UsV6c
👍1
👍1
Всесвіт надсилає знаки всім, хто користується Xilinx.

Кидайте працювати з Xilinx - Altera дасть вам можливість почати нове життя.
😁7
А тепер все серйозно.
Ранок понеділка почнемо з новин.
Ви точно пропустили цю новину – Altera тепер Altera. Вона і раніше була Altera, але не зовсім. Точніше, вона з самого початку була Altera, потім IntelFPGA (але всі все одно називали Altera), потім Altera, але все одно інтел, а от зараз – вже точно Altera.
1 січня 2025 Altera стала самостійною компанією – https://x.com/AlteraFPGA_/status/1876767709137965376
Як кажуть у пресрелізі – це тепер найбільша самостійна FPGA компанія. Насправді не найбільша, але якщо рахувати саме ті, що не мають материнської компанії – то найбільша.
З цього всього у мене є питання – а як тепер називається Xilinx? Бо наче і Xilinx, але AMD. Все складно.
І друге – а Intel тепер став ще меншим? Бо як забрали частину бізнесу в окрему кампанію, то розмір Intel став ще меншим. Зрозуміло, що як казала моя бабуся – поки товстий всохне, худий – здохне. І для нас, хто просто спостерігає за номерам в таблиці найбільших компаній, цифри взагалі не цікаві. Але ж цікаво.
Спостерігаємо далі. Бажаючі записують у щоденник спостережень за природою.
👍6😁32🗿1
Знову п'ятниця. Тому знову задачка.
Є такий код. Що він виведе на консоль?

module test;
reg [3:0] A;
reg B;
wire Y;
initial begin
A = 4'b1010;
B = 1'b1;
#1;
$display("A: %b, B: %b, Y: %b", A, B, Y);
end
assign Y = A || B;
endmodule
Знов з рибу гроші або до квізу в п’ятницю.

Відповідь, що стоїть у квізі можливо дещо бентежить, але це дійсно правильна відповідь.
Нижче скрін з 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