📄 16-bit数的偶数奇偶校验.txt
字号:
16-bit数的偶数奇偶校验(even parity)。结果延迟三个时钟 周期后赋给1-bit输出信号。时钟信号clock可用全程变量操作。完成一个 模块用以检验所定义的task.
/**********************************************************
* File: even.i
* Description: This is an include file to define a
* task calculating even parity of given data
**********************************************************/
task even;
input[15:0] din; // data in
output res; // result
reg tmp; // temporary variable
begin
tmp = ~^din;
repeat(3) @(posedge clock);
res = tmp;
end
endtask
/**************************************************************
* File: test.v
* Description: This module is the test bench to run even
* parity task
**************************************************************/
`timescale 1ns/1ns
module test;
reg clock; // clock
reg[15:0] data; // data
reg par, // parity result from task
x; // parity calculated in test bench
integer i; // loop variable
always #5 clock = !clock; // generate the clock signal
initial begin
clock = 0;
$vcdpluson;
for(i=0;i<65536;i=i+1) begin
data = i[15:0];
even(data,par); // call the task
x = !(^data); // calculate the even parity
if(x!==par) begin
$display("Error: data=%X, task result=%b, expected=%b",
data,par,x);
#20 $finish;
end
end
$display("All test completed.");
#10 $finish;
end
`include "even.i"
endmodule
4-bit数的阶乘。返回值为一32bit数。计算结果延迟 10个时间单位后赋给输出信号。完成一个模块用以检验所定义的task.
/********************************************************
* File: factorial.i
* Description: This is an include file to define
* a task for calculating factorial
********************************************************/
task factorial;
input[3:0] din; // data input
output[31:0] fac; // result output
reg[31:0] tmp; // temporary variable
begin
tmp = 1;
while(din!=0) begin
tmp = tmp * din;
din = din-1;
end
#10 fac = tmp;
end
endtask
/************************************************************
* File: test.v
* Description: This module is a test bench to test
* the factorial task
************************************************************/
`timescale 1ns/1ns
module test;
reg[3:0] d; // data to operate factorial on
integer i,j; // loop variables
reg[31:0] x; // result
integer y; // test bench calculated factorial
`include "factorial.i"
initial begin
$vcdpluson;
for(i=0;i<16;i=i+1) begin
d = i[3:0];
factorial(d,x);
y = 1;
if(d>0) for(j=1;j<=i;j=j+1) y = y*j;
if(x!==y) begin
$display("Error: d=%d, task result=%d, expected=%d",
d,x,y);
#20 $finish;
end
end
$display("All tests completed.");
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -