1、这个题刚开始没想明白,后来参考网上的一些解析明白了,先关注state后关注q。因为state也会影响去的值
2、就是ab同为1,state为1,ab同为0 state变为0否则就维持原样。 state为0时,q=ab异或。state为1时,q等于ab同或。
完整代码如下:
module top_module (
input clk,
input a,
input b,
output q,
output state );
always@(posedge clk)begin//state只有在ab都为1或者ab都为0的时候才发生变化。
state<=(a==1&b==1)?1:(a==0&b==0)?0:state;
end
assign q=state==1?!(a^b):(a^b);//state为1时异或为0 时同或
//assign state=(!a^b)==1?1:0;
endmodule
前几个也一并放这里吧,就不单独写 了
6、Sim/circuit6
module top_module (
input [2:0] a,
output [15:0] q );
always@(*)begin
case(a)
3'd0:q=16'h1232;
3'd1:q=16'haee0;
3'd2:q=16'h27d4;
3'd3:q=16'h5a0e;
3'd4:q=16'h2066;
3'd5:q=16'h64ce;
3'd6:q=16'hc526;
3'd7:q=16'h2f19;
endcase
end
endmodule
7、Sim/circuit7
module top_module (
input clk,
input a,
output q );
always@(posedge clk)begin
q<=!a;
end
endmodule
8、Sim/circuit8
module top_module (
input clock,
input a,
output p,
output q );
always@(*)begin//一个是组合
if(clock)
p=a;
else
p=p;
end
always@(negedge clock)begin//一个是时序
q<=a;
end
endmodule
9、Sim/circuit9
module top_module (
input clk,
input a,
output [3:0] q );
always@(posedge clk)begin
if(a)
q<=4'd4;
else if(q<4'd6)begin//写的一点也不美。下次再改
q<=q+1;
end
else
q<=0;
end
endmodule