Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.
Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.
Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.
V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od
… více »Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.
Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.
Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.
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...