lanlingshan

 

可综合的Task写法

1、网上有人说Muxplus不可以综合Task语句,Quartus II可以综合Task语句,在翻看了夏宇闻的《Verilog数字系统设计教程》关于书中提到的可综合的Task写法似乎都是一个类型的,在Task里面并没有定义任何的输入输出类型以及变量。

2、参考书中Task的写法,写了一个模拟陀螺仪的波形产生程序:

GyroscopeWaveSimulation
  1 module WaveGenerate(clk,reset,gp_x_pos,gp_x_neg);
  2 input clk;
  3 input reset;
  4 output reg gp_x_pos;
  5 output reg gp_x_neg;
  6 
  7 /* 产生模拟陀螺仪波形时钟 */
  8 `define system_clk 50000000
  9 `define wave_div 600000
 10 reg wave_gen_clk;
 11 reg [15:0]clk_cnt;
 12 always @(posedge clk  or negedge reset)
 13 begin
 14     if(~reset)
 15         begin
 16         wave_gen_clk<=0;
 17         clk_cnt<=0;
 18         end
 19     else if(clk_cnt==`system_clk/`wave_div/2/2-1)
 20         begin
 21         wave_gen_clk<=~wave_gen_clk;
 22         clk_cnt<=0;
 23         end
 24     else 
 25         begin
 26         clk_cnt<=clk_cnt+1;
 27         end
 28 end
 29 /* 模拟陀螺仪波形状态机 */
 30 `define pos_first 2'b01
 31 `define neg_first 2'b10
 32 
 33 `define bit1 2'b00
 34 `define bit2 2'b01
 35 `define bit3 2'b10
 36 `define bit4 2'b11
 37 
 38 reg [1:0]work_state;
 39 reg [1:0]data_state;
 40 reg identifyer;
 41 always @(posedge wave_gen_clk or negedge reset)
 42 begin
 43     if(~reset)
 44         begin
 45         work_state<=`pos_first;
 46         data_state<=`bit1;
 47         gp_x_neg<=0;
 48         gp_x_pos<=0;
 49         identifyer<=0;
 50         end
 51     else 
 52         begin
 53         case (work_state)
 54         `pos_first:begin
 55                     if(~identifyer)
 56                         pos_first_cycle;
 57                     else 
 58                         begin
 59                         work_state<=`neg_first;
 60                         data_state<=`bit1;
 61                         identifyer<=0;
 62                         end
 63                     end
 64         `neg_first:begin
 65                     if(~identifyer)
 66                         begin
 67                         neg_first_cycle;
 68                         end
 69                     else 
 70                         begin
 71                         work_state<=`pos_first;
 72                         data_state<=`bit1;
 73                         identifyer<=0;
 74                         end
 75                     end
 76         default:begin
 77                 work_state<=`pos_first;
 78                 end
 79         endcase
 80         end
 81 end
 82 /* 正脉冲发送周期 */
 83 task pos_first_cycle;
 84     begin
 85             case (data_state)
 86             `bit1:begin
 87                     gp_x_pos <=1;
 88                     data_state <=`bit2;
 89                     end
 90             `bit2:begin
 91                     gp_x_neg<=1;
 92                     data_state<=`bit3;
 93                     end
 94             `bit3:begin
 95                     gp_x_pos<=0;
 96                     data_state<=`bit4;
 97                     end
 98             `bit4:begin
 99                     gp_x_neg<=0;
100                     data_state<=`bit1;
101                     identifyer<=1;
102                     end
103             default:begin
104                     data_state<=`bit1;
105                     end
106             endcase
107     end
108 endtask
109 /* 负脉冲发送周期 */
110 task neg_first_cycle;
111     begin
112         case (data_state)
113         `bit1:begin
114                 gp_x_neg<=1;
115                 data_state<=`bit2;
116                 end
117         `bit2:begin
118                 gp_x_pos<=1;
119                 data_state<=`bit3;
120                 end
121         `bit3:begin
122                 gp_x_neg<=0;
123                 data_state<=`bit4;
124                 end
125         `bit4:begin
126                 gp_x_pos<=0;
127                 data_state<=`bit1;
128                 identifyer<=1;
129                 end
130         default:begin
131                 data_state<=`bit1;
132                 end
133         endcase
134     end
135 endtask
136 endmodule 

 最后观察示波器的波形正确。

 

 

3、似乎这种Task写法就是将Task中的Case内容搬到相应的地方去。

posted on 2012-04-20 14:57  lanlingshan  阅读(1672)  评论(0编辑  收藏  举报

导航