V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) byla vydána v nové verzi 1.26.0. Přehled novinek v příspěvku na blogu.
Ve středu 29. dubna 2026 se v pražské kanceláři SUSE v Karlíně uskuteční 7. Mobile Linux Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj i uživatelský prostor. Akce proběhne od 10:00 do večerních hodin. Hackday je určen všem zájemcům o praktickou práci s Linuxem na telefonech. Zaměří se na vývoj aplikací v userspace, například bankovní aplikace, zpracování obrazu z kamery nebo práci s NFC, i na úpravy
… více »LilyPond (Wikipedie) , tj. multiplatformní svobodný software určený pro sazbu notových zápisů, byl vydán ve verzi 2.26.0. Přehled novinek v aktualizované dokumentaci.
Byla vydána nová verze 11.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 237 vývojářů. Provedeno bylo více než 2 500 commitů. Přehled úprav a nových vlastností v seznamu změn.
Společnost SpaceX amerického miliardáře Elona Muska oznámila, že si zajistila opci buď na akvizici startupu Cursor za 60 miliard dolarů (přes 1,2 bilionu Kč) do konce letošního roku, nebo na zaplacení deseti miliard dolarů za nové partnerství s touto firmou zabývající se generováním kódů. SpaceX se dále prosazuje na lukrativním trhu s vývojářskými nástroji pro umělou inteligenci (AI). Cursor, startup zabývající se prodejem modelů AI pro
… více »Díky AI modelu Claude Mythos Preview od společnost Anthropic bylo ve Firefoxu nalezeno a opraveno 271 zranitelností.
Byla vydána nová verze 2.54.0 distribuovaného systému správy verzí Git. Přispělo 137 vývojářů, z toho 66 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 13.0. Přehled novinek v aktualizované dokumentaci a na YouTube. Stalo se tak na konferenci GrafanaCON 2026.
Na YouTube proběhl Framework [ Next Gen ] Event 2026. Společnost Framework představila nový Framework Laptop 13 Pro, vylepšení Framework Laptopu 16 a OCuLink Dev Kit pro připojení vysoce výkonných periferií jako jsou eGPU a bezdrátovou klávesnici s integrovaným touchpadem Framework Wireless Touchpad Keyboard.
Byl vydán Mozilla Firefox 150.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 150 bude brzy k dispozici také na Flathubu a Snapcraftu.
Všechny naše dosavadní obvody měly jeden společný rys. Neobsahovaly žádný paměťový prvek, takže hodnoty na výstupu byly závislé pouze na vstupních signálech. Takovéto obvody nazýváme kombinační. Skládají se pouze z logických členů (AND, OR, NOT, ...) a neobsahují zpětné vazby. Naproti tomu obvody, které obsahují paměťové prvky, se nazývají sekvenční. Jejich výstup není určen pouze vstupními signály, ale i vnitřním stavem obvodu (stavem jednotlivých paměťových prvků).
Jak jsme již naznačili minule (Jak se píše procesor - 3 (Procesy)),
jako paměťový prvek budeme využívat pouze registr (tzn. nebudeme tvořit
zpětné vazby v logice). Podívejme se, jak můžeme registr vytvořit pomocí
VHDL. Využijeme k tomu entitu example_2 podobnou entitě z
minulého dílu s tím rozdílem, že obsahuje navíc dva vstupní signály -
RESET a CLK.
ENTITY example_2 IS
PORT (
CLK, RESET: in std_logic;
I1, I2: in std_logic;
O: out std_logic
);
END example_2;
ARCHITECTURE arch_3 OF example_2 IS
BEGIN
p_1: process (RESET, CLK)
begin
if (RESET = '1') then -- asynchronni reset
O <= '0';
elsif (CLK'event and CLK = '1') then -- reakce na vz. hranu
O <= I1 and I2;
end if;
end process;
END arch_3;
Do procesu jsme vložili dvě sekce. Jednu reagující na reset a jednu na vzestupnou hranu hodin. VHDL zápis konkrétně znamená:
RESET '1', spusť první sekci
příkazů (to odpovídá činnosti asynchronního resetu v registru - nastavení
implicitních hodnot po startu systému).elsif) spusť druhou sekci příkazů, ale
pouze v případě, že došlo ke změně signálu CLK a tento signál
má hodnotu '1' (odpovídá náběžné hraně). Jinak řečeno, přiřaď
do výstupního signálu určenou logickou funkci, ale pouze v okamžiku
náběžné hrany hodin. Proto tento zápis vloží na konec cesty každého
výstupního signálu registr.Náš příklad bude tedy vypadat takto:

Podmíněný příkaz tvořící registr (if RESET... elsif
CLK...) je dobré brát pokud možno dogmaticky. Dnešní
programovatelné obvody důrazně dělí obvod na logiku a registry a každý
zásah do této části VHDL kódu může tuto strukturu narušit. Programovatelné
obvody také mají dedikované hodinové rozvody, proto, pokud si nejsme
jisti, je dobré používat v celém obvodu pouze jeden signál
CLK.
Nyní známe takřka všechno, co je třeba k napsání procesoru ve VHDL. Navrhněme proto další entitu - sadu registrů. Zvolme jednoduchou variantu sady čtyř osmibitových registrů, kde jedinou funkcí bude zápis do registrů a čtení z nich.
ENTITY register_set IS
PORT (
CLK, RESET: in std_logic;
I: in std_logic_vector(7 downto 0);
O: out std_logic_vector(7 downto 0);
ADDR: in std_logic_vector(1 downto 0);
WR: in std_logic
);
END register_set;
ARCHITECTURE behavioral OF register_set IS
signal R1, R2, R3, R4: std_logic_vector(7 downto 0);
BEGIN
p_1: process (RESET, CLK)
begin
if (RESET = '1') then -- asynchronni reset
R1 <= (others => '0');
R2 <= (others => '0');
R3 <= (others => '0');
R4 <= (others => '0');
elsif (CLK'event and CLK = '1') then -- reakce na vz. hranu
if WR = '1' then
if A = "00" then
R1 <= I;
elsif A = "01" then
R2 <= I;
elsif A = "10" then
R3 <= I;
else
R4 <= I;
end if;
end if;
end if;
end process;
O <= R1 when A = "00" else
R2 when A = "01" else
R3 when A = "10" else
R4;
END behavioral;
V entitě definujeme vstupní a výstupní signály. CLK a
RESET jsou důležité pro synchronizaci registrů.
I a O jsou vstupní a výstupní datové sběrnice,
A vybírá jeden ze čtyř registrů. Pomocí signálu
WR zapisujeme do jednotlivých registrů. Signál pro čtení
není třeba, na výstupní sběrnici je vždy hodnota aktivního registru.
V deklarační části architektury si definujeme čtyři pomocné osmibitové
signály, pomocí kterých vytvoříme vlastní registry. Hlavní část těla
architektury tvoří proces, který implikuje vytvoření registrů a realizuje
zápis. Kód nám říká, že v případě aktivního signálu WR má být
přiřazena hodnota sběrnice I do jednoho ze signálů
R1 - R4. Toto přiřazení se má provést pouze v
okamžiku náběžné hrany signálu CLK. Pro syntezátor to tedy
znamená vytvoření čtyř osmibitových registrů se vstupem I,
výstupem R1 - R4 a povolovacím signálem (chip
enable, CEx) tvořeným ze signálů WR a
A.
Výstup O je tvořen pomocí signálu WHEN. V
tomto případě to bude multiplexor, který vybírá výstup jednoho z registrů
v závislosti na adrese A.
Na obrázku je znázorněno zjednodušené schéma pro 2 registry:

Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
začína to konečne vyzerať, že sa s tým dá niečo robiť... nenapíšete čitateľom nabudúce ukážkový 64bitový procesor? :)))
A teraz Vážne! Chcel som sa spýtať, či je existujú postupy na optimalizáciu hotových návrhov? Možno niekdo potrebuje usporiť a radšej by použil viacero lacnejších odvodov, ako pár drahšich.
.
V tomto serialu se pohybujeme v oblasti navrhu pro hradlova pole FPGA. To znamena, ze cely nas design nahrajeme obvykle do jednoho programovatelneho FPGA.
Jinak optimalizace provadi syntezator, ktery se snazi o co nejlepsi prevod naseho VHDL kodu do vnitrni struktury FPGA.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
ENTITY registers IS
GENERIC (
data_w : natural := 8;
addr_w : natural := 2;
num_regs : natural := 4
);
PORT (
res : IN std_logic;
clk : IN std_logic;
wr_en : IN std_logic;
addr : IN std_logic_vector(addr_w-1 DOWNTO 0);
data_in : IN std_logic_vector(data_w-1 DOWNTO 0);
data_out : OUT std_logic_vector(data_w-1 DOWNTO 0)
);
END registers;
ARCHITECTURE rtl OF registers IS
SUBTYPE reg_t IS std_logic_vector(data_w-1 DOWNTO 0);
TYPE reg_arr_t IS ARRAY (num_regs-1 DOWNTO 0) OF reg_t;
SIGNAL rg_ar_reg : reg_arr_t;
SIGNAL rg_ar_cmb : reg_arr_t;
SIGNAL rg_wr_cmb : std_logic_vector(num_regs-1 DOWNTO 0);
SIGNAL rg_sel_cmb : std_logic_vector(num_regs-1 DOWNTO 0);
BEGIN
gen_reg_array:
FOR i IN 0 TO num_regs-1 GENERATE
----
-- Registers Array
----
rg_ar_reg_proc:
PROCESS (res, clk)
BEGIN
IF (res = '1') THEN
rg_ar_reg(i) <= (OTHERS => '0');
ELSIF (clk'EVENT AND clk ='1') THEN
rg_ar_reg(i) <= rg_ar_cmb(i);
END IF;
END PROCESS rg_ar_reg_proc;
----
-- Register selection
----
sel_reg_cmb_proc:
PROCESS (addr, wr_en)
VARIABLE sel_v : std_logic_vector(num_regs-1 DOWNTO 0);
BEGIN
sel_v := (OTHERS => '0');
sel_v(conv_integer(unsigned(addr))) := '1';
rg_sel_cmb <= sel_v;
END PROCESS sel_reg_cmb_proc;
----
-- Registers array next
----
rg_ar_cmb_proc:
PROCESS (data_in, rg_ar_reg, rg_sel_cmb, wr_en)
BEGIN
IF (rg_wr_cmb(i)= '1' AND wr_en='1') THEN
rg_ar_cmb(i) <= data_in;
ELSE
rg_ar_cmb(i) <= rg_ar_reg(i);
END IF;
END PROCESS rg_ar_cmb_proc;
END GENERATE gen_reg_array;
----
-- Data output selection
----
data_sel_cmb_proc:
PROCESS (rg_ar_reg, addr)
VARIABLE addr_v : natural;
BEGIN
addr_v := conv_integer(unsigned(addr));
data_out <= rg_ar_reg(addr_v);
END PROCESS;
END rtl;
I tady je co vylepsovat. Napriklad registrovat vystup. Vasi poznamku o hokeji v casovani jsem nejak nepochopil. Co pipeline???
Jinak v tom Vasem kodu je chyba a nejde zkompilovat ("ADDR"!="A").
A tomu kody co je v clanku velmy dobre rozumim... Ale tomu kodu od profika uz nechapu. Aspom mam co studovat. Uvital bych vic takovych ukazek od profiku aby se clovek mel na cem ucit. Nejlepe aby kod byl komentovani...