我正在尝试编写verilog代码来执行以下3个任务:
我的代码如下:
module moveled(input clk, input buttonright, input buttonleft, output [15:0]led);
reg [15:0]led=16'b0000100000000000;
wire slowclk;
wire r;
wire qr;
wire l;
wire ql;
slowclock clk(clk, slowclk);
pulse spR(clk,buttonright,r);
pulse spL(clk,buttonleft,l);
jkff jkR(r,r,clk,qr);
jkff jkL(l,l,clk,ql);
always @(posedge slowclk)
begin
if(qr==1 && ql==0)
begin
led<=led>>1;
end
else if(qr==0 && ql==1)
begin
led<=led<<1;
end
else
led<=led;
end
endmodule
slowclock模块正在使LED向右/向左移动得更慢,以便更容易观察到。脉冲模块用于去除去抖动。 2 jkff模块是t触发器,用于切换qr和ql,使led连续向右/向左移动。我的代码中的主要问题是始终阻塞,代码在qr=1
和ql=1
时失败。例如,如果qr=1
,我的指示灯向右移动,我按下左按钮以便qr=1
和ql=1
,指示灯停止。当我尝试再次按下左按钮向左移动时,led将向右移动,因为ql=0
和qr=1
。 if()中的敏感度列表必须为qr==1 && ql==0
,否则led将向右移动。
因此,该代码如上所述使任务3失败。任何帮助将不胜感激。
答案 0 :(得分:0)
假设你的脉冲按一个按钮的水平按下一个1个时钟宽的脉冲(边缘检测),那么你可能只有:
注意:需要通过初始或低电平有效复位来添加复位以将状态设置为S_IDLE。
SELECT x.*
FROM my_table x
JOIN my_table y
ON y.category_id = x.category_id
AND y.timestamp >= x.timestamp
GROUP
BY x.category_id,x.timestamp
HAVING COUNT(*) <= 2;