verilog - 在 Verilog 中执行移位操作时位不会移位
问题描述
我正在尝试在verilog中构建一个传输8位数据的SPI模块,但是在进行移位操作时,我注意到移位根本不移位位,而MOSI和MISO仅在第一个周期后取零值,这导致两边的数据衰减为零。我能做些什么来解决这个问题?
大师代码:
module Master(input clk, input MISO,
output reg MOSI, output reg SS);
initial SS = 0;
reg [2:0] counter;
reg [7:0] Master_reg = 8'b11011011;
always @ (posedge clk)
begin
if(!SS)
begin
if(^counter === 1'bx)
counter = 0;
else
counter = counter + 1;
MOSI = Master_reg[7];
Master_reg = Master_reg >> 1;
Master_reg[0] = MISO;
end
if(counter == 7)
SS = 1;
end
endmodule
奴隶代码:
module Slave(input clk, input MOSI, input SS,
output reg MISO);
reg [2:0] counter;
reg [7:0] Slave_reg = 8'b11111111;
always @ (posedge clk)
begin
if(!SS)
begin
if(^counter === 1'bx)
counter = 0;
else
counter = counter + 1;
MISO = Slave_reg[0];
Slave_reg = Slave_reg << 1;
Slave_reg[7] = MOSI;
end
end
endmodule
给定数据的传输(来自主机的 11011011,来自从机的 11111111)给出以下结果:
编辑:我使用EDA Playground作为模拟器
解决方案
主从都有错误。您正在发送 的最重要位master_reg
,但将该寄存器向右移动。您必须将其向左移动。
与从机相同,正在发送的位不是数据被移向的位。
顺便说一句,主机和从机都必须转向相同的方向。否则,您将在主从之间反转数据。
推荐阅读
- azure - 带有 VS 测试步骤的 Azure 管道无法完成
- javascript - 如何使用 JavaScript 从外部网站提取元数据?
- c# - 我可以使用 ExpressionVisitor 遍历表达式主体成员吗?
- java - Apache Camel 文件组件:聚合后的异常应将文件移动到 .error 文件夹
- docker - 无法使用 Heroku 部署调用容器的端点
- java - java尝试获取输入时没有此类元素异常
- python - 术语“pipx”未被识别为 cmdlet 的名称
- css - 未应用 Wordpress CSS
- java - Spring Boot @Value 注释返回 null
- html - HTML/CSS - 悬停时在屏幕中央以实际大小显示图像,点击再次缩小?