我是一名希望学习verilog的程序员.
什么是令人惊讶的整洁将是一个教程,其中一个构建一个非常干净的设计的微型微处理器,像英特尔4004,然后继续实际使用一个fpga并使其闪存LED订购.
有这样的教程吗?
如果没有,我可能会尝试写一个,因为我尝试这样做.有没有人对我可能利用的资源有任何建议?例如,很好的开源verilog编译器,调试工具,模拟器,verilog教程,便宜的fpgas和编程工具,LED面包板等.
以下是一些说明及其相应的编码:
55 push %ebp
89 e5 mov %esp,%ebp
83 ec 18 sub $0x18,%esp
a1 0c 9f 04 08 mov 0x8049f0c,%eax
85 c0 test %eax,%eax
74 12 je 80484b1 <frame_dummy+0x21>
b8 00 00 00 00 mov $0x0,%eax
85 c0 test %eax,%eax
74 09 je 80484b1 <frame_dummy+0x21>
c7 04 24 0c 9f 04 08 movl $0x8049f0c,(%esp)
Run Code Online (Sandbox Code Playgroud)
今天的微处理器通常是32位或64位,我猜他们通常以4字节或8字节的块从内存中读取数据.但是,指令可以具有可变长度.微处理器如何解码这些指令,为什么它们的长度不一致以便于实现?
计算机体系结构意义上的"处理器(CPU)"和"微处理器"有什么区别?这些用语令我困惑.
在下面的代码中,
int main( )
{
register int arr[4];
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在某些cpu寄存器中分配'arr'.(考虑cpu有4个或更多寄存器).
或者编译器会忽略数组的寄存器存储类.
c compiler-construction embedded microcontroller microprocessors
在浏览RISC-V ISA时,我在内存模型部分(FENCE指令)中看到了一条指令.这究竟是什么意思?
假设你有一个(1)Intel/AMD x86-64 bit 2 GHz 8核处理器.
8个内核中的每一个都是在完整的2 GHz运行,还是每个内核运行的时间是整个2 GHz时钟的一部分(例如250 MHz)?
内存地址寄存器(MAR)和程序计数器(PC)如何相互不同?
我正在为微处理器编写一些代码.
它有一些大的关键常数.
#define F_CPU 16000000UL
在这种情况下,这是CPU频率.在赫兹.
实际上,如果没有手动在数字上标记光标,则很难判断它是1,600,000,160,000,000还是16,000,000.
如果我在数字中加入逗号#define F_CPU 16,000,000UL,它会截断常量.
我使用了一些具有特定数字分隔符的深奥语言,旨在使大数字更具可读性(例如16_000_000,主要是用于MCU的语言).大型"神奇数字"在嵌入式内容中相当普遍,因为它们需要描述MCU如何与现实世界对话.
C中有这样的东西吗?
我无法理解方向标志是如何工作的x86.在我的演讲中的文本说,它递增或递减的源或目的寄存器但这没有任何意义与它的名字.有人可以解释它的作用吗?
microprocessors ×10
assembly ×2
c ×2
embedded ×2
x86 ×2
architecture ×1
cpu ×1
eflags ×1
fpga ×1
intel ×1
processor ×1
readability ×1
riscv ×1
verilog ×1