ir (verb): ir (pronouned as eer) is a very commonly used verb which means "to go". It's not like -ir verbs, which have a family of verbs. ir is it's own little verb. ir also has it's own transformation table similar to -ar verbs for present tense and --er/-ir for past tense. (it follows -ar table instead of -ir table). Since ir is monosyllabic and irregular, it's conjugation is different. Replace ir by letter "v" and add suffix similar to -ar verb (Transformation for 1st person "I" is little different as shown below).

ex: I need to go => necesito ir (I need => necesito). Full translation is Yo necesito ir. But yo is dropped as is common with pronouns.

Verbs similar to ir: we have verbs similar to "go", but they fall into ar/er/ir verb categories. They have nothing to do with verb ir. Ex:

  • irme => ir + me => to go + myself => to leave.
    • ex: I have to leave now (or I got to go now) => tengo que irme ahora (used very often)
  • regresar => to go back (to somewhere). Remember from English word "regress" which means to go backwards (opposite of progress). Volver is another verb, which means "to come back". See under "irregular verb" section.
  • dejar (de-har) => It's basic idea is of leaving something (or someone) somewhere, placing something somewhere, or abandoning something. It doesn't mean "to leave" a place, for which "salir" is used. Opposite of salir/ir is venir, which means "to come". These words are under "irregular verb" section. Dejar is among the most common verb used in Spanish, so let's look at it's all possible usage:
    • Use 1: to leave or place something somewhere: ex: I left my keys here => Yo dejé mis llaves aqui.
    • Use 2: To ask or give permission, mostly as "to let" (This is the most common use of dejar). ex: Would you let me go to the fiesta? => ¿me dejarías ir a la fiesta?. Let me speak => Déjame hablar. 
    • Use 3: To leave alone: ex: Leave me/it alone => Déjame/Déjalo en paz. Leave your sister alone! => ¡Deja a tu hermana!
    • Use 4: To quit or stop (interruption of continuing event): ex: I had to stop working in the garden => Tuve que dejar de trabajar en la jardin.
    • Use 5: To abandon or give in. Use reflexive form (dejarse) ex: Let oneself go (i.e carried away) => dejarse llevar

Using "a"(pronouned aa) as to: This is where "a" is used as a preposition that links nouns and pronouns to other words as to, on, about, with, etc. When we use "go to" instead of "go" (i.e go to a place", or "going to do something", etc), then we use "a" to indicate "to". ex: to go to => ir a.

  • Feminine place: If the place is feminine then it's "la ...". So, it's " ir a la"
    • ex: I have to go to the hospital => tengo que ir a la hospital (with have to, we use que)
  • Masculine place: . If the place is masculine, then it's "el ...". But then "a + el" doesn't sound too good when speaking, so they are combined as 1 word "al" (pronouned aal). So, it's "ir al ..."
    • ex: I want to go to the park => quiero ir al parque (since parque is masculine, a+el becomes al)

 


 

Back to back verbs:

We saw this in verb section. When we have back to back verbs, then the first verb is conjugated based on the 3x2 table, and the second verb is w/o any conjugation. 2 back to back verbs are often seen with "to go" verb, but may be with other verbs too.

ex: He is happy to go back to school => Here "happy" is an adjective and "to go back" is a verb, so it's not an ex of back to back verbs. Happy is NOT a verb (we don't say happied, happying, etc), but rather an adjective. So "happy to go" => contenta regresar. WE use "de" in b/w the adj and verb for word "to". We use personal "a" with "ir" verb, i.e go  + to somewhere, etc. So, translation for "to go to school" => ir a la escuela. Here it's "go back" which is simiilar to "to go", so it becomes => regresar a la escuela. Full translation is => él está contenta de regresar a la escuela

 


 

Tenses: We'll talk about all 3 tenses => Present, Past and Future. Video (from Butterfly Spanish channel, It also discusses tenses for tener, ser/estar): https://www.youtube.com/watch?v=K6SUsWizytA

Present tense: of the 4 verbs (ir, tener, ser, estar) is different, and discussed in their own section.

Past tense of ser is exactly same as ir, but tener and estar are slightly different (though tener and estar are same except for prefix es- added for estar).

Future tense of all 4 verbs is exactly the same except for verb ir, tener, ser, estar suffixed to voy, etc. See below.

 

Present Tense / Present Progressive:

Base word ir transforms to v. Now we can apply the pattern as would apply to present tense of -ar (NOT -ir even though ir looks like ir) verb. For most other verbs, gerund form is different and requires ser/estar + gerund_form. But for ir, "go" (present tense) and "going" (Present Progressive) use the same transformation table as shown below. So, Spanish doesn't different b/w "I go" vs "I'm going". They both translate to "yo voy"

NOTE:

  • Auxillary verb "am" doesn't have separate translation when used with verb "go". However, with all other verbs, we have to use ser/estar form for "am" (i.e I'm reading => soy estoy leyendo, but for "I am going" => yo voy and NOT "yo estoy voy". So, always remember "ir" as special verb.
  • Another verb "ver" means "to see" (see in verb section below). . It's 1st person "veo" looks similar to voy below.

 

 base word = ir (to go) => change to v singular plural ( add s at end)
 I => First person

voy (similar to -o, but then it becomes vo. So y added at end which is similar to soy for "am")

ex: yo voy => I go ("yo ir" may also be used) or I'm going

ex: me voy => I am going (Not sure how??)

vamos (similar to -amos)

ex: ¡vamos! => Let's go (it should be "we go"). it's commonly used expression

You (informal) => Second person

vas (similar to -as)

vais (similar to -ais, no accent on a)

He, she, You (formal=> Third person

va (similar to -a)

ex: él va => He goes or He is going

van (similar to -an)

ex: ustedes van => They (all) go or They are going

 ex:

  • I go there => yo voy allí.
  • I'm going with my friends => yo voy con mis amigos
  • Where are you going? => ¿A Dónde va? (A is added in the beginning  since the response includes "to" => I'm going to ...)

 

Past Tense:

Base word ir transforms to fu. Now we can apply the pattern as would apply to past tense of -er/-ir verb shown later below. Past tense of "ir" is same as that of another verb "ser". Past tense of the 4 verbs is as below:

  • ir/ser: 2 forms: ir => "I went", and ser => "I was" (permanent). Both of them use the same past tense form as table below, even though present tense are different. This happened due to some confusing integration of Latin with Spanish. Fortunately, based on context, it's easy to figure whether you are saying "I was" or I went". Idealy, they should have had different past tense forms. I don't complain, as I don't have to learn one more conjugation :)
  • tener: Past form of tener is irregular with stem being "tuv". It's explained under "Past tense Verb" section. 
  • estar: Past form of estar takes same form as tener, but with es- prefix added to "tener" past tense stem. So, stem becomes "estuv". See in ser/estar section.

 

 base word = ir (to go) => change to fu for went or was singular plural ( add s at end)
 I => First person

fui (-i, same as past tense for -ir/-er)

ex: yo fui => I went OR I was

fuimos (-imos, same as past tense for -ir/-er)

You (informal) => Second person

fuiste (-iste, same as past tense for -ir/-er)

fuisteis (-isteis, same as past tense for -ir/-er)

He, she, You (formal=> Third person

fue (instead of -ió, we use -e which is same as present tense of -ir)

ex: él fue => He went or He was

fueron (instead of -ieron, we use -eron)

ex: ustedes fueron => They all went OR they were

 

Future Tense:

Future tense of "go" is "will go". Base word ir remain same, and 3x2 table is exactly same as future tense of -ar/-er/-ir verb.

 base word = ir (to go) singular plural
 I => First person

iré

ex: yo  iré => I will go

iremos

You (informal) => Second person

irás

iréis

He, she, You (formal=> Third person

irá

ex: él irá => He will go

irán

ex: ustedes irán => You (all) will go

 

Informal Future Tense:

We saw that future tense of "go" is "will go". "I am going" is present progressive tense of "I go", but both are translated the same => yo voy. "I am going to ..." is most used future form which translates to "voy a". "a" is added since "to" is always there (a is used 99% of the time with ir) => it's "going to place or doing activity, etc". Presence of "to" indicates it's future tense, and we use "a" for it. Strictly speaking "I'm going to" is not future tense, but is present progressive (as explained above). However, "go" is a special verb. Most of the times, "going to" translates to something in future, so we refer to it as informal future form. Informal Future tense of "go" is also used with other 3 verbs (have=tener, to be=ser/estar) with no change. Ex:  I am going to have => voy a tener. I am going to be => voy a ser/estar.

  • ir: Here" going to" is "voy a, vas a, va a, etc"
    • ex: I'm going to read/eat a nacho => voy a leer/comer un nacho => voy means "I am going", and to read/eat is "leer/comer". Since there is a real verb following "going", we have to use "a".
    • ex: Where are you going? => Under Personal aa in Noun section, we saw that when the response requires an "aa" response, the question should have an "a" in front of the question. It should be ¿ADónde vas? Response is => I'm going to Mexico => voy a mexico. ex: Where are the girls going? => ¿Adónde van las chicas?
    • ex: I'm going to go => yo voy a ir
  • tener: Future tense of 'Have to" is "going to have", which is same as ir form above with tener added, i.e va a tener, etc.
    • ex: She is going to have a drink => Ella va a tener una copa.
    • ex: She is going to have a baby => Ella va a tener una bebe (feminine) OR un bebe (masculine)
  • ser/estar: Future tense of to be is "going to be", which is same as ir(going) with ser/estar (to be) added. ser is for permanent condition, while estar is for temporary. ex: voy a ser OR voy a estar. See in ser/estar section.
    • ex: He is going to be a doctor => él va a ser medico
    • ex: You are going to be sick => vas a estar enfermo/enferma

 


Cortex M0+, M1, M3, M4, M7

These are all built as supersets of M0. They keep adding more hardware, support more instructions, more debug support, and hence resulting in larger size and higher power. The only exception is M0+ which is actually smallest microcontroller of all of M0 family.

 



Cortex M0+ (ARMv6-M):

Cortex M0+ is an optimized superset of the Cortex-M0, and is still based on ARMv6-M. The Cortex-M0+ has complete instruction set compatibility with the Cortex-M0 thus allowing the use of the same compiler and debug tools (so compilers etc still refer to arch as Cortex-M0) . The Cortex-M0+ pipeline was reduced from 3 to 2 stages, which lowers the power usage. In addition to debug features in the existing Cortex-M0, a silicon option can be added to the Cortex-M0+ called the Micro Trace Buffer (MTB) which provides a simple instruction trace buffer. The Cortex-M0+ also received Cortex-M3 and Cortex-M4 features, which can be added as silicon options, such as the Memory Protection unit (MPU) and the vector table relocation.

 


 

Cortex M1 (ARMv6-M):

The Cortex-M1 is an optimized core especially designed to be loaded into FPGA chips, and is still based on ARMv6-M. It brought back the 3 stage pipeline to improve performance.

 


 

Cortex M3 (ARMv7-M):

The Cortex-M3 is the first M processor based on ARMv7-M arch. It supports entire Thumbs1 and Thumbs2 ISA.

 


 

Cortex M4/M4F (ARMv7E-M):

Conceptually the Cortex-M4 is a Cortex-M3 plus DSP instructions, and optional floating-point unit (FPU). A core with an FPU is known as Cortex-M4F. It's based on ARMv7-M arch (or to be precise Enhanced version of v7 known as v7E)

 


 

Cortex M7/M7F (ARMv7E-M):

The Cortex-M7 is a high-performance core with almost double the power efficiency of the older Cortex-M4. It is like a modern processor featuring a 6-stage superscalar pipeline with branch prediction. A core with an FPU is known as Cortex-M7F. and is capable of single-precision and optionally double precision operations. The instruction and data buses have been enlarged to 64-bit wide over the previous 32-bit buses.

 

 

 

Digital Logic Design:

Here we'll cover some of the logic blocks that are used very frequently in RTL. We'll show code using Verilog. Some of the most common Logic elements are:

  • Logic Gates, flip-flops, i.e NAND, OR, LATCH, etc. These need a circuit diagram, and will be covered as analog part of digital
  • Clk gaters: These are also parrt of logic gates (available in librrary), but will be covered separately
  • Async Fifo => Very popular technique to transfer data from one clk domain to other clk domain

Asynchronous FIFO

This is such a popular interview topic and also a highly used component in design, that I'm having a separate section for this.

There are 2 very good papers on Async FIFO design by Clifford Cummings of SunBurst.

Add hand drawn diagrams

 

 

Version Control Software (VCS):

This refers to Version control (also known as Source Control, or Revision Control or Source Code manangement), where changes to a file or files is managed via a software called as "Version Control Software". In any modern software development, any program that we write goes thru changes over it's lifetime. If we didn't maintain a revision history of the changes, it would pose too many problems. Some of the common ones would be:

  • If the file accidently gets deleted or corrupted, our whole program is gone for ever, unless we kept backups. VCS. allows us to keep multiple backups at regular interval (either automated or manual).
  • With changes happening to our program, we want to keep a snapshot of changes, so that it's easy to revert to any previous state of the program. As an ex, if we have 5 files for a program, and we get it to work, we might want to keep a snapshot of this working program. Then we go ahead and make enhancements. If we create a bug, where the whole program now now refuses to even compile, one way is to debug it. But other easier way would be go to the snapshot and see what all changed. Or we can just restore the copy from snapshot and start from there. VCS allows us to do that.
  • With multiple people working on the same program, VCS allows us to easily merge all these changes in the central repository, without having to manually figure out all the changes and then integrating them.

Wiki: https://en.wikipedia.org/wiki/Version_control

Popular VCS are RCS, CVS, Git

Very good explanation of how VCS should work: https://tom.preston-werner.com/2009/05/19/the-git-parable.html

RCS:

 

VCS:

 

Git: