Ubuntu安装Verilator

根据Github上的文档安装 链接
由于Ubuntu还不太会用,所以跟着下面的教程在Windows上安装了开发环境

Windows安装vscode+iVerilog

跟随教程 链接

学习Verilog

阅读数字设计和计算机体系结构的第4章
阅读USTC数字电路实验教程中的Verilog语法 链接
通过USTC的Verilog OJ学习编写,目前只写到ID34
[hide-block name="OJ截图"]

屏幕截图_24-1-2024_193154_verilogoj.ustc.edu.cn.jpeg
屏幕截图_24-1-2024_193154_verilogoj.ustc.edu.cn.jpeg
[/hide-block]

重复操作

在将重复操作嵌入拼接操作时,需要用大括号把重复操作整体括起来。例如:如果将 {{24{a[7]}}, a[7:0]} 改为 {24{a[7]}, a[7:0]} 就会出现语法错误。

逻辑非 ! 和按位非 ~ 在什么情况下等价?在什么情况下不等价?逻辑或 || 和按位或 | 呢?逻辑与 && 和按位与 & 呢?

答案来自newbing

在Verilog中,逻辑非 ! 和按位非 ~
的区别在于操作数的位宽。对于位宽为1的变量,这两个操作符的作用是一样的,都是求反。但是,对于位宽大于1的变量,这两个操作符的作用就不一样了。例如,对于位宽为2的变量a
[1:0],! 表示 ~(a[0] | a[1]),只有当a的每一位都为0时,结果才为1。而 ~ 表示对每一位按位取反。

逻辑或 || 和按位或 | 的区别在于操作数的位宽和值。按位或 | 是将 a 的每个位与 b 相同的位进行相或。逻辑或 || 是 a 或上
b,如果a或者b有一个为1,a||b结果为1,表示真。如果需要对多比特的向量执行逻辑或运算,需要使用循环或其他逻辑结构。

逻辑与 && 和按位与 & 的区别在于操作数的位宽和值。按位与 & 是对于两个二进制数的每一位进行逻辑与运算。逻辑与 &&
是一个双目运算符,当符号两边为1时输出1,符号两边为0时输出0。当对多位操作数进行逻辑与运算时,只有当所有位都为1时,结果才为1。否则,结果为0。当对多位操作数进行按位与运算时,结果仍为多位数。每一位的结果是两个对应位的逻辑与。例如,对于两个4位的数A和B,A[3:0]
& B[3:0] 的结果是 { A[3] && B[3] , A[2] && B[2], A[1] && B[1], A[0] &&
B[0] }。当对一个4位的数进行按位与运算时,输出的结果为1位的数。例如,对于4位的数A,&A 的结果是 A[3] && A[2] &&
A[1] && A[0]。因为4位数A中间都有1,所以A的按位或结果都为1。