Se connecter

Informatique

Programmation

Sujet : Construire un proc Arduino ?
1
pierre135b
Niveau 10
04 octobre 2015 à 21:56:49

Yo, oui vous avez bien lu :hap:
Ce serait possible de créer un processeur avec un arduino ?
Un processeur basique, stack based je pense serait le plus simple qui serait capable d'effectuer disons une vingtaine d'opcodes à 1mhz. Un petit truc quoi :hap:
Si c'est possible, par ou commencer? Comment élaborer le schéma du proc et que acheter ?
Ce que je veux faire c'est le coeur,l'exécution matérielle des opcodes,le décodeur et l'alu je peux le programmer avec un board arduino au pire :hap:

Mercii [[sticker:p/1kki]]

Pseudo supprimé
Niveau 10
04 octobre 2015 à 22:16:02

Ouhlà, je sais pas si tu te rends compte, mais une petite puce type ATtiny 85 (compatible Arduino) possède déjà une architecture interne hyper complexe, avec une mémoire RAM, une mémoire flash ...
Regarde l' Attiny13A : http://s.zeptobars.ru/atmel-attiny13a-HD.jpg (en 500nm ! )

Après, tu peux faire un petit circuit composé de quelques portes logiques pour avoir un semblant de de calcul, mais après :doute:

godrik
Niveau 22
04 octobre 2015 à 22:35:23

Je ne comprends pas bien ce que tu cherches a faire. Tu veux construire un nouveau processeur?
Quel rapport avec un arduino?

J'ai concu (logiquement) un processeur il y a une dizaine d'annee dans diglog. C'etait un projte de L3, et ca a pris un semestre entier. Tu parles de centaines et de centaines de transistor pour faire un proc 8 bits. Donc pas que ca soit impossible a designer. Mais je ne vois pas bien comment tu comptes le faire physiquement.

kernel[]
Niveau 10
04 octobre 2015 à 22:36:43

Pareil que godrik on a concu un minuscule virtuellement, mais physiquement c'est juste immonde y a beaucoup trop de logique à implémenter tu vas te perdre

pierre135b
Niveau 10
04 octobre 2015 à 22:42:24

blafy
Tu t'y connais au moins?
Ta puce est basée sur l'architecture Atmel AVR, qui possede entre 90 et 135 opcodes ainsi que 32 registres, c'est normal que ce soit complexe :bravo:

Moi je veux que disons 20 opcodes (voir 10) et une machine stack based (= pas de registres), c'est infiniment plus simple que l'Atmel AVR.

Petite puce veut pas dire puce simple, je parle d'un truc amateur tu t'amene avec une puce gravée en 500nm fait par une multinationale.
C'est comme si je disais
"J'aimerais faire une petite machine a vapeur pour propulser une voiture a 20kmh" et que tu disais
"Oulah t'as vu la complexité d'un v8 qui va à 100kmh ? oO"

Source https://fr.m.wikipedia.org/wiki/Atmel_AVR

pierre135b
Niveau 10
04 octobre 2015 à 22:44:11

Bon si c'est trop complexe a réaliser en vrai pour commencer, je démarre ou si je veux en faire un simulé ? (Avec un logiciel,lequel?)

godrik
Niveau 22
04 octobre 2015 à 22:44:11

pierre, la question est : qu'est ce que ut veux obtenir a la fin? physiquement un processeur que tu as construit toi meme ? Comment compte tu l'assembler?

godrik
Niveau 22
04 octobre 2015 à 22:44:39

J'ai fait du diglog il y a longtemps. C'etait pas mal.

pierre135b
Niveau 10
04 octobre 2015 à 22:47:44

http://m.instructables.com/id/How-to-Build-an-8-Bit-Computer/ ?
Bah à la fin j'aimerais un truc avec un arduino ou autre,physique et qui fonctionne pour faire des trucs basique (Add,mul,sub,div,store serait déja fantastique je trouve !)
Le lien, c'est ce que je cherche?

godrik
Niveau 22
04 octobre 2015 à 22:54:58

qu'est ce que tu veux faire avec un arduino, c'est ca que je ne comprends pas. Il y a deja un processeur dans l'arduino. Comment penses tu l'utiliser pour construire un autre processeur?

Sinon, oui ca ressemble a qui un processeur construit a la main ressemblerait.

pierre135b
Niveau 10
04 octobre 2015 à 22:56:26

Bon j'avoue je me suis perdu avec arduino xD
Je devrais suivre le tuto et tenter qqch dans un logiciel de simulation de circuits?

godrik
Niveau 22
04 octobre 2015 à 22:58:34

je commencerai la, en effet.

pierre135b
Niveau 10
04 octobre 2015 à 23:00:06

Okei, y'a pas d'autres tutos qui pourraient m'être utiles ? :p

godrik
Niveau 22
04 octobre 2015 à 23:02:15

J'ai appris ces trucs la dans des bouquins, en amphi et en salle de TP. Je ne sais pas si il y a un "tuto" pour ce genre de chose.

Pseudo supprimé
Niveau 10
05 octobre 2015 à 00:22:11

Le 04 octobre 2015 à 22:42:24 pierre135b a écrit :
blafy
Tu t'y connais au moins?
Ta puce est basée sur l'architecture Atmel AVR, qui possede entre 90 et 135 opcodes ainsi que 32 registres, c'est normal que ce soit complexe :bravo:

Moi je veux que disons 20 opcodes (voir 10) et une machine stack based (= pas de registres), c'est infiniment plus simple que l'Atmel AVR.

Petite puce veut pas dire puce simple, je parle d'un truc amateur tu t'amene avec une puce gravée en 500nm fait par une multinationale.
C'est comme si je disais
"J'aimerais faire une petite machine a vapeur pour propulser une voiture a 20kmh" et que tu disais
"Oulah t'as vu la complexité d'un v8 qui va à 100kmh ? oO"

Source https://fr.m.wikipedia.org/wiki/Atmel_AVR

M'enfin, mais pourquoi cette haine ? J'ai rien amené du tout moi, c'est toi qui a commencé à parler de créer une puce type Arduino, pas moi :hap:
Puis comme Godrik, j'avais pas compris que tu voulais utiliser Arduino comme outil, ton titre et ton texte laisse penser "construire un proc arduino" = "construire un micro contrôleur type atmel"

pierre135b
Niveau 10
05 octobre 2015 à 17:00:32

Désolé je me suis mal exprimé alors,autant pour moi ^^
https://image.noelshack.com/fichiers/2015/41/1444056913-diagramme-sans-nom.png

J'ai créé ce petit schéma abstrait, c'est bon, j'ai rien oublié pour un proc capable de faire :
Note: j'ai confondu load&store sur le schéma avec store et move ^^
Note2: Pour les opérations demandant un Rx (registre x) sauf les 2 premieres, on peut spécifier l'Accumulateur à la place
LOAD (Adresse) Rx
STO Rx (Adresse)
ADD Rx1 Rx2 Rx3
SUB Rx1 Rx2 Rx3
AND Rx1 Rx2 Rx3
OR Rx1 Rx2 Rx3

Seul petit truc sur lequel je coince, quand je veux envoyer qqch à la ram style "Déplace la valeur à l'adresse XX dans le registre x"
Mais que l'adresse du registre et de la mémoire sont dans PC+1 et PC+2, je fais comment pour les récupérer et dire à la ram de faire son job ? ^^

J'emploie un opcode différent qui stipule à la ram de demander au PC son adresse +1 et +2 pour les arguments ?

Puis maintenant, va falloir schématiser tout cela héhé
ça devrait aller je pense, je recréerais un topic pour les demandes si je coince, j'essaierais de faire cela à petite échelle d'abord avec genre 4 Cellules mémoires 2 Bytes, 3 registres 2 Bytes aussi avant d'en faire un "vrai" avec 255 cellules mémoires (8 Bits) étalées sur 32 Bits chacunes (Donc des INT quoi ^^)

J'essaierais de le faire dans Minecraft aussi, ça peut être pas mal pour visualiser le tout en action ! :p

godrik
Niveau 22
05 octobre 2015 à 18:17:13

Comment ca pourrait etre dans PC+1?

(C'est moi ou il n'y a pas de pipeline dans ton processeur?)

pierre135b
Niveau 10
05 octobre 2015 à 19:12:57

Bah imaginons que PC (Program counter) pointe vers la "cellule" 12000 de la ram, c'est une instruction qui veux copier la valeur de la cellule 26890 à la cellule 26988 mais que les 2 valeurs des cellules sources et cibles soient contenues dans PC+1 et PC+2 donc les cellules 12001 et 12002 :hap:

Pipeline, tu veux dire https://fr.wikipedia.org/wiki/Pipeline_(architecture_des_processeurs)
J'en ai pas fait, je savais même pas que cela existait.
Je veux faire un truc tout simple, pas un machin super opti, bien que si c'est pas dur à intégrer why not ^^

pierre135b
Niveau 10
05 octobre 2015 à 19:21:13

SI j'ai bien compris, pour implémenter un pipeline, je dois créer un registre entre chaque étape du proc, et à chaque signal d'horloge le registre déverse son contenu dans l'étage suivant puis l'étage suivant renvoie le contenu dans le tampon suivant ?
En gros c'est comme une autoroute ou les gens s'arretent entre chaque étape ? ^^

pierre135b
Niveau 10
05 octobre 2015 à 22:40:39

Ah et pour les pipelines stall, le mieux c'est de faire communiquer les registres temporaires du pipeline entre eux pour éviter la latence ? (DATA FORWARDING)

1
Sujet : Construire un proc Arduino ?
   Retour haut de page
Consulter la version web de cette page