题解 | #奇偶校验#
奇偶校验
http://www.nowcoder.com/practice/67d4dd382bb44c559a1d0a023857a7a6
Tips
赋值
①"always"模块内的reg型信号如果采用下面的这种赋值方式:
b <= a;
这种方式的赋值并不是马上执行的,也就是说"always"块内的下一条语句执行后,b并不等于a,而是保持原来的值。"always"块结束后,才进行赋值。
②另一种赋值方式阻塞赋值方式,如下所示:
b = a;
这种赋值方式是马上执行的。也就是说执行下一条语句时,b已等于a。
模块
①在描述模块功能时,input只能为wire型,output可以为wire或者reg型
②在例化模块时,被例化模块的input可以为wire或者reg型,output只能为wire型
Verilog Code
`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
wire odd, even;
assign even = ^bus;
assign odd = ~even;
reg check_t;
always @(sel or bus) begin
if(!sel) begin
check_t = odd;
end
else begin
check_t = even;
end
end
assign check = check_t;
//*************code***********//
endmodule
Testbench Code
`timescale 1ns/1ns
module testbench();
reg clk=0;
always #5 clk = ~clk; // Create clock with period=10
// A testbench
reg [31:0] bus = 0;
reg sel = 0;
wire check;
odd_sel t(.bus(bus),
.sel(sel),
.check(check));
always begin
#20 sel = ~sel;
end
always begin
#20 bus++;
end
//end
initial begin
$dumpfile("out.vcd");
$dumpvars(0, testbench);
#200 $finish;
end
endmodule