Verilog及FPGA学习考试必备经典程序(二).pdf
文本预览下载声明
目录
1. 加法计数器中的进程2
2. 任务举例2
3. 测试程序3
4. 函数 4
5. 用函数和 case 语句描述的编码器 (不含优先顺序)4
6. 阶乘运算函数5
7. 测试程序6
8. 顺序执行模块 1 6
9. 顺序执行模块 2 7
10. 并行执行模块 1 7
11. 并行执行模块 2 8
12. 调用门元件实现的 4 选 1 MUX 8
13. 用 case 语句描述的 4 选 1 MUX 9
14. 行为描述方式实现的 4 位计数器 9
15. 数据流方式描述的 4 选 1 MUX 10
16. 用条件运算符描述的 4 选 1 MUX 10
17. 门级结构描述的2 选 1MUX 10
18. 行为描述的 2 选 1MUX 10
19. 数据流描述的 2 选 1MUX 11
20. 调用门元件实现的 1 位半加器 11
21. 数据流方式描述的 1 位半加器 11
22. 采用行为描述的 1 位半加器 12
23. 采用行为描述的 1 位半加器 12
24. 调用门元件实现的 1 位全加器 13
25. 数据流描述的 1 位全加器 13
26. 1 位全加器 13
27. 行为描述的 1 位全加器 13
28. 混合描述的 1 位全加器 14
29. 结构描述的 4 位级连全加器 15
30. 数据流描述的 4 位全加器 15
31. 行为描述的 4 位全加器 15
1
1. 加法计数器中的进程
module count(data,clk,reset,load,cout,qout);
output cout;
output[3:0] qout;
reg[3:0] qout;
input[3:0] data;
input clk,reset,load;
always @(posedge clk) //进程 1 ,always 过程块
begin
if (!reset) qout= 4h00; //同步清0 ,低电平有效
else if (load) qout= data; //同步预置
else qout=qout + 1; //加法计数
end
assign cout=(qout==4hf)?1:0; //进程 2 ,用持续赋值产生进位信号
endmodule
2. 任务举例
module alutask(code,a,b,c);
input[1:0] code;
input[3:0] a,b;
output[4:0] c;
reg[4:0] c;
task my_and; //任务定义,注意无端口列表
input[3:0] a,b; //a,b,out 名称的作用域范围为 task 任务内部
output[4:0] out;
integer i;
begin
2
for(i=3;i=0;i=i-1)
out[i]=a[i]b[i]; //按位与
end
endtask
always@(code or a or b)
begin
case(code)
2b00: my_and(a,b,c);
/*调用任务 my_and ,需注意端口列表的顺序应与任务定义中的一致,
显示全部