2个回答
展开全部
module(CLK,CLR,A,B,Q);
input CLK;
input CLR;
input A;
input B;
output reg [7:0] Q; //因为在时序逻辑块中操作,强制规定Q为寄存器类型,默认端口为wire型
always@(posedge CLK or negedge CLR ) //CLK上升沿为模块触发条件,清零信号异步复位
begin
if(!CLR) //CLR信号低电平复位
Q <= 8'b0;
else if ((A == 1'b1)&&(B == 1'b1)) //依据判决条件进行操作
begin
Q[0] <= 1;
Q[7:1] <= Q[6:0];
end
else if (A == 1'b0)
begin
Q[0] <= 0;
Q[7:1] <= Q[6:0];
end
else Q <= Q; //其他条件下输出寄存器Q保持原值
end
endmodule
//如果你那里Q0代表最低位的话,要求右移不太恰当。会使输出结果始终为零,如果是左移的话
//如上面程序Q[7:1]<= Q[6;0]表达;如果Q0代表最高位 则替换成:
/*
Q[7] <= 1'b1;//或者是1‘b0
Q[6:0] <= Q[7:1];
*/
input CLK;
input CLR;
input A;
input B;
output reg [7:0] Q; //因为在时序逻辑块中操作,强制规定Q为寄存器类型,默认端口为wire型
always@(posedge CLK or negedge CLR ) //CLK上升沿为模块触发条件,清零信号异步复位
begin
if(!CLR) //CLR信号低电平复位
Q <= 8'b0;
else if ((A == 1'b1)&&(B == 1'b1)) //依据判决条件进行操作
begin
Q[0] <= 1;
Q[7:1] <= Q[6:0];
end
else if (A == 1'b0)
begin
Q[0] <= 0;
Q[7:1] <= Q[6:0];
end
else Q <= Q; //其他条件下输出寄存器Q保持原值
end
endmodule
//如果你那里Q0代表最低位的话,要求右移不太恰当。会使输出结果始终为零,如果是左移的话
//如上面程序Q[7:1]<= Q[6;0]表达;如果Q0代表最高位 则替换成:
/*
Q[7] <= 1'b1;//或者是1‘b0
Q[6:0] <= Q[7:1];
*/
追问
关键就是那个第二行的CLK是低电频怎么描述呢,我不理解这个?
always @(??)这里是触发信号,但是写的是posedge CLK,那第二行低电频怎么解释呢?我刚学这个,想不通这个??
展开全部
你这样分析这个真值表:
1)在Q= 0,即CLR为低有效时,和CLK的状态无关(因为是CLK是X):说明CLR是异步低有效,所以有always@( negedge CLR)
2)Q其他情况有效时,都在CLK是上升沿时,加上1)里面的,最后是:always@( negedge CLR or posedge CLK)
小结:就是 输出数据变化时,这个变化依赖谁,谁就得写在always@( )里面
希望能帮到你!
1)在Q= 0,即CLR为低有效时,和CLK的状态无关(因为是CLK是X):说明CLR是异步低有效,所以有always@( negedge CLR)
2)Q其他情况有效时,都在CLK是上升沿时,加上1)里面的,最后是:always@( negedge CLR or posedge CLK)
小结:就是 输出数据变化时,这个变化依赖谁,谁就得写在always@( )里面
希望能帮到你!
追问
那第二行的CLK低电平怎么描述呢??
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询