分配具有初始值的 reg
Assign reg which has initial value
我正在 8x8 led 矩阵上使用 basys 3 实现俄罗斯方块游戏。
reg [7:0]redBlock;
reg [7:0]backupRed= 8'b00011000;
reg [7:0]temp;
assign redBlock=(toRight& oe) ? backupRed>> 1 : backupRed;
这段代码正在运行,当我向右按下按钮时,led 矩阵上的红块向右移动,但它当然会回到初始位置,因为条件 0 等于 backupRed
我真正想要的是
reg [7:0]redBlock = 8'b00011000;;
reg [7:0]backupRed;
reg [7:0]temp;
assign redBlock=(toRight& oe) ? redBlock>> 1 : redBlock;
应该更新 redBlock 的先前位置但它给出错误
Variable redBlcok is written by both continuous and procedural assigments
我正在使用 Vivado 进行实现
这是我的意思的 10 秒视频
您正在使用连续赋值 assign
来描述您希望存储的数据。
连续赋值是用来描述组合逻辑的,但是这里要的是时序逻辑,一个寄存器(触发器)。
大致如下:
reg [7:0]redBlock = 8'b00011000;
always @(posedge ck or posedge rst) begin
if(rst)
redBlock <= 8'b00011000;
else
redBlock <= (toRight& oe) ? redBlock>> 1 : redBlock;
end
编辑:关于您可能 运行 遇到什么样的麻烦的一些想法。
不确定toRight
是什么信号,假设toRight
是原始按钮输入:
首先,您需要synchronize您的按钮输入。
如果您的时钟相对于 toRight
的持续时间较慢,您可能需要捕获短脉冲并生成一个时钟周期长脉冲。
如果您的时钟相对于 toRight
的持续时间来说比较快,您可能需要添加一个计数器,以确保单次按下按钮不会增加太多 redBlock
每按一次。
此外,您可能需要处理 redBlock
已到达显示器边缘的情况。
我正在 8x8 led 矩阵上使用 basys 3 实现俄罗斯方块游戏。
reg [7:0]redBlock;
reg [7:0]backupRed= 8'b00011000;
reg [7:0]temp;
assign redBlock=(toRight& oe) ? backupRed>> 1 : backupRed;
这段代码正在运行,当我向右按下按钮时,led 矩阵上的红块向右移动,但它当然会回到初始位置,因为条件 0 等于 backupRed
我真正想要的是
reg [7:0]redBlock = 8'b00011000;;
reg [7:0]backupRed;
reg [7:0]temp;
assign redBlock=(toRight& oe) ? redBlock>> 1 : redBlock;
应该更新 redBlock 的先前位置但它给出错误
Variable redBlcok is written by both continuous and procedural assigments
我正在使用 Vivado 进行实现
这是我的意思的 10 秒视频
您正在使用连续赋值 assign
来描述您希望存储的数据。
连续赋值是用来描述组合逻辑的,但是这里要的是时序逻辑,一个寄存器(触发器)。
大致如下:
reg [7:0]redBlock = 8'b00011000;
always @(posedge ck or posedge rst) begin
if(rst)
redBlock <= 8'b00011000;
else
redBlock <= (toRight& oe) ? redBlock>> 1 : redBlock;
end
编辑:关于您可能 运行 遇到什么样的麻烦的一些想法。
不确定toRight
是什么信号,假设toRight
是原始按钮输入:
首先,您需要synchronize您的按钮输入。
如果您的时钟相对于 toRight
的持续时间较慢,您可能需要捕获短脉冲并生成一个时钟周期长脉冲。
如果您的时钟相对于 toRight
的持续时间来说比较快,您可能需要添加一个计数器,以确保单次按下按钮不会增加太多 redBlock
每按一次。
此外,您可能需要处理 redBlock
已到达显示器边缘的情况。