input sysclk,
input signed [16:0] input_forcevalue,
output output_direction,
- output reg output_pwm = 0
+ output reg output_pwm = 0,
+ output output_overflow
);
- wire [16:0]absforce;
+ wire [15:0]absforce;
assign absforce = input_forcevalue < 0 ? - input_forcevalue : input_forcevalue;
assign output_direction = input_forcevalue[16];
+ assign output_overflow = absforce > 12'hfff;
- // 2.94KHz
- reg [11:0] slowclkcounter = 0;
- reg [11:0] currentamplitude = 0;
+ reg [3:0] slowclkcounter = 0;
always @(posedge sysclk) begin
slowclkcounter <= slowclkcounter + 1;
- if (slowclkcounter == 0) begin
+ end
+
+ // 2.94KHz
+ wire prescale;
+ assign prescale = slowclkcounter[3];
+ reg [7:0] currentamplitude = 0;
+ reg [7:0] forcecnt = 0;
+ always @(posedge prescale) begin
+ forcecnt <= forcecnt + 1;
+ if (forcecnt == 0) begin
output_pwm <= ~output_pwm;
- currentamplitude <= absforce[15:4];
+ if (output_overflow == 0)
+ currentamplitude <= absforce[11:3];
+ else
+ currentamplitude <= 8'hff;
end
- else if (slowclkcounter == currentamplitude) begin
+ else if (forcecnt == currentamplitude) begin
output_pwm <= ~output_pwm;
end
- end
-/*
- wire slowclk; //1.9kHz
- assign slowclk = slowclkcounter[9];
-
- reg [15:0] forcecnt = 0;
- always @(posedge slowclk) begin
- forcecnt <= forcecnt + 1;
- if ((forcecnt == 0) ^ (forcecnt == absforce)) output_pwm <= ~output_pwm;
end
-*/
+
endmodule
<wave_state>
</wave_state>
<db_ref_list>
- <db_ref path="forcefader_behav.wdb" id="1">
+ <db_ref path="testbench_behav.wdb" id="1">
<top_modules>
- <top_module name="forcefader" />
<top_module name="glbl" />
+ <top_module name="testbench" />
</top_modules>
</db_ref>
</db_ref_list>
<zoom_setting>
- <ZoomStartTime time="193010847551723fs"></ZoomStartTime>
- <ZoomEndTime time="193306015689656fs"></ZoomEndTime>
- <Cursor1Time time="193256821000000fs"></Cursor1Time>
+ <ZoomStartTime time="0fs"></ZoomStartTime>
+ <ZoomEndTime time="14550000000001fs"></ZoomEndTime>
+ <Cursor1Time time="0fs"></Cursor1Time>
</zoom_setting>
<column_width_setting>
<NameColumnWidth column_width="219"></NameColumnWidth>
- <ValueColumnWidth column_width="138"></ValueColumnWidth>
+ <ValueColumnWidth column_width="126"></ValueColumnWidth>
</column_width_setting>
<WVObjectSize size="7" />
- <wvobject type="logic" fp_name="/forcefader/sysclk">
- <obj_property name="ElementShortName">sysclk</obj_property>
- <obj_property name="ObjectShortName">sysclk</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/input_touch">
- <obj_property name="ElementShortName">input_touch</obj_property>
- <obj_property name="ObjectShortName">input_touch</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/en">
- <obj_property name="ElementShortName">en</obj_property>
- <obj_property name="ObjectShortName">en</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/dir">
- <obj_property name="ElementShortName">dir</obj_property>
- <obj_property name="ObjectShortName">dir</obj_property>
- </wvobject>
<wvobject type="group" fp_name="group25">
<obj_property name="label">ADC</obj_property>
<obj_property name="DisplayName">label</obj_property>
- <wvobject type="logic" fp_name="/forcefader/vp_in">
- <obj_property name="ElementShortName">vp_in</obj_property>
- <obj_property name="ObjectShortName">vp_in</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/vn_in">
- <obj_property name="ElementShortName">vn_in</obj_property>
- <obj_property name="ObjectShortName">vn_in</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/xa_p">
- <obj_property name="ElementShortName">xa_p</obj_property>
- <obj_property name="ObjectShortName">xa_p</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/xa_n">
- <obj_property name="ElementShortName">xa_n</obj_property>
- <obj_property name="ObjectShortName">xa_n</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/enable">
- <obj_property name="ElementShortName">enable</obj_property>
- <obj_property name="ObjectShortName">enable</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/address_in">
- <obj_property name="ElementShortName">address_in[6:0]</obj_property>
- <obj_property name="ObjectShortName">address_in[6:0]</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/ready">
- <obj_property name="ElementShortName">ready</obj_property>
- <obj_property name="ObjectShortName">ready</obj_property>
- </wvobject>
+ <obj_property name="isExpanded"></obj_property>
</wvobject>
<wvobject type="group" fp_name="group23">
<obj_property name="label">Force</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
- <wvobject type="array" fp_name="/forcefader/input_pos">
- <obj_property name="ElementShortName">input_pos[11:0]</obj_property>
- <obj_property name="ObjectShortName">input_pos[11:0]</obj_property>
- <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/spring_instance/endposition">
- <obj_property name="ElementShortName">endposition[11:0]</obj_property>
- <obj_property name="ObjectShortName">endposition[11:0]</obj_property>
- <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/spring_instance/stiffness">
- <obj_property name="ElementShortName">stiffness[7:0]</obj_property>
- <obj_property name="ObjectShortName">stiffness[7:0]</obj_property>
- <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
- </wvobject>
- <wvobject type="logic" fp_name="/forcefader/forceconverter_instance/output_direction">
- <obj_property name="ElementShortName">output_direction</obj_property>
- <obj_property name="ObjectShortName">output_direction</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/forceconverter_instance/absforce">
- <obj_property name="ElementShortName">absforce[16:0]</obj_property>
- <obj_property name="ObjectShortName">absforce[16:0]</obj_property>
- <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/outputforce">
- <obj_property name="ElementShortName">outputforce[16:0]</obj_property>
- <obj_property name="ObjectShortName">outputforce[16:0]</obj_property>
- <obj_property name="Radix">SIGNEDDECRADIX</obj_property>
- </wvobject>
</wvobject>
<wvobject type="group" fp_name="group24">
<obj_property name="label">PWM</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
- <wvobject type="logic" fp_name="/forcefader/forceconverter_instance/output_pwm">
- <obj_property name="ElementShortName">output_pwm</obj_property>
- <obj_property name="ObjectShortName">output_pwm</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/forceconverter_instance/currentamplitude">
- <obj_property name="ElementShortName">currentamplitude[9:0]</obj_property>
- <obj_property name="ObjectShortName">currentamplitude[9:0]</obj_property>
- <obj_property name="Radix">HEXRADIX</obj_property>
- </wvobject>
- <wvobject type="array" fp_name="/forcefader/forceconverter_instance/slowclkcounter">
- <obj_property name="ElementShortName">slowclkcounter[9:0]</obj_property>
- <obj_property name="ObjectShortName">slowclkcounter[9:0]</obj_property>
- <obj_property name="Radix">HEXRADIX</obj_property>
- </wvobject>
+ </wvobject>
+ <wvobject type="logic" fp_name="/testbench/sysclk">
+ <obj_property name="ElementShortName">sysclk</obj_property>
+ <obj_property name="ObjectShortName">sysclk</obj_property>
+ </wvobject>
+ <wvobject type="logic" fp_name="/testbench/en">
+ <obj_property name="ElementShortName">en</obj_property>
+ <obj_property name="ObjectShortName">en</obj_property>
+ </wvobject>
+ <wvobject type="logic" fp_name="/testbench/dir">
+ <obj_property name="ElementShortName">dir</obj_property>
+ <obj_property name="ObjectShortName">dir</obj_property>
+ </wvobject>
+ <wvobject type="logic" fp_name="/testbench/overflow">
+ <obj_property name="ElementShortName">overflow</obj_property>
+ <obj_property name="ObjectShortName">overflow</obj_property>
</wvobject>
</wave_config>