目录
wire,reg,assign,always,initial都代表什么含义?在什么类型的语句中使用?
genrerate bits什么功能?为什么会生成失败?什么原因?
IP核是什么?如何调用?xci是什么文件?coe文件是什么文件?怎么写进内存?
RS、RT、RD在汇编语言的位置在哪?有什么区别和特定功能?
[VRFC 10-529] concurrent assignment to a non-net an is not permitted ["C:/Users/chenxy/Desktop/digit
Q&A
-
casex是什么意思
casex,casez:在casex中利用x代替未知数字,casez用?代替未知数字,通常用于仿真
-
always(*)中的*是什么意思
敏感列表控制的简单写法,表示模块中所有输入变量都是敏感的
-
wire,reg,assign,always,initial都代表什么含义?在什么类型的语句中使用?
wire,reg是数据类型,assign为连续赋值语句,always,initial为过程结构语句
-
怎么看仿真波形
- flow->simulation setting->检查下软件vivado、语言verilog、文件、周期
- flow->run simulation
- 点击右上角unite1可看波形
- 放大缩小可以看波形更清楚
(54条消息) Vivado下的仿真入门_leon_zeng0的博客-CSDN博客_vivadoverilog object窗口怎么新增变量
-
genrerate bits什么功能?为什么会生成失败?什么原因?
bits是写入硬件板里。
- 注意constraints中的引脚要写对,是不是默认引脚,有没生成对应引脚文件等
(54条消息) Vivado:Generate Bitstream比特流写入失败的解决方法_Retrospector的博客-CSDN博客_bitstream generation failed
-
什么是可综合?什么不可综合?综合的功能是什么?
- 功能:在标准单元库和设计约束的基础上构建门级电路
- 目的:产生物理电路门级结构,寻求最优测试方式
- 对象:时延、初始化不可综合
-
slt,slti是什么指令,有什么功能和区别
slt是小于即置位,slti是立即数的小于即置位。
slt $s0,$s1,$s2 -------->if($s1<$s2) $s0=1;else $s0=0;
-
$signed作用
$signed()是符号拓展时使用的,将位数拓展。
- Verilog中的负数是{1‘b符号,pos_num},所以最好用$signed()来拓展符号
- 移位操作使用《》以免符号丢失
(55条消息) Verilog 中signed和$signed()的用法_长弓的坚持的博客-CSDN博客_verilog signed
-
IP核是什么?如何调用?xci是什么文件?coe文件是什么文件?怎么写进内存?
定义:带有特定功能的硬件语言程序,与集成电路无关,可以移植到半导体工艺的集成电路的生产。
xci是ip调用生成文件,coe是初始化存储器的文件
(55条消息) 手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器_迷路的小黑的博客-CSDN博客_vivado怎么生成数据存储器模块dataram
-
单通道ROM是什么?
类似数值的维度,单通道0-255只能是数值,而多通道则能同时输送多个数据
(55条消息) 单通道和三通道学习理解单通道:_xiyong890的博客-CSDN博客
-
如何分频?
利用原频率/目标频率,得到一个分段计数,只要用计数器数,在数到分段计数一半时时钟翻转,就达到分频
(55条消息) Verilog时钟分频模块设计_Ryzen3的博客-CSDN博客_verilog时钟分频设计
-
小端模式如何体现?怎么写代码?
小端模式是低字节放在低地址处即0x76543210放在小端就是01 23 45 67
拼接时{R[a+3],R[a+2],R[a+1],R[a]},就可以将小端存储入存储区
-
ALU怎么根据多选器选择输入端?
各写好2个输入和一个多选器,再多写个top,实例化时输入值变成多选器的值即可
-
确定指令长度怎么写代码?
-
RS、RT、RD在汇编语言的位置在哪?有什么区别和特定功能?
op | rs | rt | rd | shamt | funct |
0 | $s2 | $s3 | $s1 | 0 | 32 |
add $s1,$s2,$s3,最左侧对应目的寄存器,依次为rs,rt
op | rs | rt | rd | shamt | funct |
8 | $s2 | $s1 | 100 |
addi $s1,$s2,100 两边都是相加数,中间的rt是结果寄存器
-
编译器蓝、黄线意味着什么?
都是编译有问题的地方,蓝线应该是变量未使用;黄色应该是多写符号;红色是编译出错。
-
怎么解析指令获得控制信号?
指令相当于标志,对应的指令控制信号要自己对着数据通路想。
-
除了新开一个综合,怎么更改文件路径?
目前我只想到新开项目的方法,多添加路径。
-
怎么把ram改成rom?
直接点“source”里对应内存就可以打开设置了
-
为何仿真时出现高阻值?
因为没有逻辑综合,要综合不同文件后再仿真才有数值
编译错误
-
[Synth 8-685] variable 'alures' should not be used in output port connection ["C:/Users/86173/Desktop/Computer_experiment/Single_termCPU/test/alu_top.v":37]
输出端口得是wire型,要能够修改
-
[VRFC 10-529] concurrent assignment to a non-net an is not permitted ["C:/Users/chenxy/Desktop/digit
对一个非网口类型不能同时赋值,要改成wire型
-
寄存器组的值怎么传递到不同接口
找了几小时,原因竟然是地址这里位数写错了,导致数值根本没写进去!!!
-
为何周期是pc的两倍?
always @(negedge clk) // 时钟下降沿操作
begin
if(!reset)
begin
if(!halt) begin
pcc <= add4; //使用了旧的add4
add4 <= pcc + 4;//使用了旧的pc值
end
end
else begin
pcc <= 32'b0; // 复位时pc写0
add4 <= 32'h4;
end
end
assign pc=pcc;
clk | pcc | add4 |
0 | 0 | 4 |
1 | 4 | 4 |
2 | 4 | 8 |
可以看出需要2次触发PC才能变成下一个地址。
always @(negedge clk) // 时钟下降沿操作
begin
if(!reset)
begin
if(!halt) begin
pcc = add4; //使用了新的add4
add4 = pcc + 4;//使用了新的pc值
end
end
else begin
pcc = 32'b0; // 复位时pc写0
add4 = 32'h4;
end
end
assign pc=pcc;
clk | pcc | add4 |
0 | 0 | 4 |
1 | 4 | 8 |
2 | 8 | 12 |
可以看出只要一个周期触发就能增加PC。