Byla vydána nová verze 9.15 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Společnost CORSAIR podporuje svůj systém iCUE LINK pouze ve Windows a macOS. Jak jej ovládat v Linuxu? OpenLinkHub (GitHub) je open source linuxové rozhraní k iCUE LINK. Z webového rozhraní na adrese http://localhost:27003 lze ovládat RGB osvětlení, rychlost ventilátorů, nastavovat klávesnice, myši, headsety…
Ve funkci koordinátora k bitcoinové kauze skončil bývalý ústavní soudce David Uhlíř. Informaci, kterou zveřejnil Deník N, potvrdila Radiožurnálu ministryně spravedlnosti Eva Decriox (ODS). Uvedla, že odchod byl po vzájemné dohodě. „Jeho mise je ukončená, auditní procesy se už povedlo nastavit,“ řekla. Teď má podle ministryně další kroky podniknout policie a státní zastupitelství. Koordinátorem jmenovala ministryně Uhlíře 19. června.
Byla vydána nová verze 25.07.26 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Po 9 týdnech vývoje od vydání Linuxu 6.15 oznámil Linus Torvalds vydání Linuxu 6.16. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna a Linux Kernel Newbies.
Americký výrobce čipů Intel propustí 15 procent zaměstnanců (en), do konce roku by jich v podniku mělo pracovat zhruba 75.000. Firma se potýká s výrobními problémy a opouští také miliardový plán na výstavbu továrny v Německu a Polsku.
MDN (Wikipedie), dnes MDN Web Docs, původně Mozilla Developer Network, slaví 20 let. V říjnu 2004 byl ukončen provoz serveru Netscape DevEdge, který byl hlavním zdrojem dokumentace k webovým prohlížečům Netscape a k webovým technologiím obecně. Mozille se po jednáních s AOL povedlo dokumenty z Netscape DevEdge zachránit a 23. července 2005 byl spuštěn MDC (Mozilla Developer Center). Ten byl v roce 2010 přejmenován na MDN.
Wayback byl vydán ve verzi 0.1. Wayback je "tak akorát Waylandu, aby fungoval Xwayland". Jedná se o kompatibilní vrstvu umožňující běh plnohodnotných X11 desktopových prostředí s využitím komponent z Waylandu. Cílem je nakonec nahradit klasický server X.Org, a tím snížit zátěž údržby aplikací X11.
Byla vydána nová verze 6.18 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Nově se lze k síti Tor připojit pomocí mostu WebTunnel. Tor Browser byl povýšen na verzi 14.5.5. Thunderbird na verzi 128.12.0. Další změny v příslušném seznamu.
Meta představila prototyp náramku, který snímá elektrickou aktivity svalů (povrchová elektromyografie, EMG) a umožňuje jemnými gesty ruky a prstů ovládat počítač nebo různá zařízení. Získané datové sady emg2qwerty a emg2pose jsou open source.
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.
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").