adjust
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Wed, 5 Dec 2018 15:58:25 +0000 (16:58 +0100)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Wed, 5 Dec 2018 15:58:25 +0000 (16:58 +0100)
fpga/Cmod-A7-Master.xdc
fpga/forcefader.srcs/sources_1/new/forceconverter.v
fpga/forcefader.srcs/sources_1/new/spring.v
fpga/forcefader.v
fpga/forcefader.xpr
fpga/forcefader_ts.wcfg

index f581a259887ac3170e6034f9bcb752ed9c88aa99..120c1a41173d751b23f67ec469fb8b7b8ae5638d 100644 (file)
@@ -8,7 +8,7 @@ set_property -dict { PACKAGE_PIN L17   IOSTANDARD LVCMOS33 } [get_ports { sysclk
 create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports {sysclk}];
 
 ## LEDs
-#set_property -dict { PACKAGE_PIN A17   IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L12N_T1_MRCC_16 Sch=led[1]
+set_property -dict { PACKAGE_PIN A17   IOSTANDARD LVCMOS33 } [get_ports { overflow }]; #IO_L12N_T1_MRCC_16 Sch=led[1]
 #set_property -dict { PACKAGE_PIN C16   IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L13P_T2_MRCC_16 Sch=led[2]
 
 ## RGB LED
index bd686707be24b638b4e8a0fbbf39288d8db8b13e..e8402d1b4bc5d1a784c86060566faf431067ebfb 100644 (file)
@@ -2,35 +2,38 @@ module forceconverter(
   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
index 6627c6518fd42fc51d91aae0506b82fca805252c..5bac3ce5ea2ae9b581f2b9ba10bb8a0e31f6aa3f 100644 (file)
@@ -1,6 +1,6 @@
 module spring (
-  input [11:0] position,
-  input [11:0] endposition,
+  input [9:0] position,
+  input [9:0] endposition,
   input [7:0] stiffness,
   output signed [16:0] outputforce
   );
index 1753d02b2405c11fbc1548cc038fd0c0e135b7b7..9a8a5ca949ed377253b99b66167b0521cb61c74f 100644 (file)
@@ -3,6 +3,7 @@ module forcefader (
   input input_touch,
   output en,
   output dir,
+  output overflow,
   input vp_in,
   input vn_in,
   input xa_p,
@@ -42,8 +43,8 @@ module forcefader (
   
   //compute spring force
   spring spring_instance(
-    .position(input_pos),
-    .endposition(12'b000000000010),
+    .position(input_pos[11:2]),
+    .endposition(10'b0111111111),
     .stiffness(8'b00000011),
     .outputforce(outputforce)
   );
@@ -53,7 +54,8 @@ module forcefader (
     .sysclk(sysclk),
     .input_forcevalue(outputforce),
     .output_direction(dir),
-    .output_pwm(en)
+    .output_pwm(en),
+    .output_overflow(overflow)
   );
 
 endmodule
index d86b5d2e448986e3ead057d164b86772a0bca5b5..d999f87be3196aed6409640dd5fd1c9d66bd2e1c 100644 (file)
@@ -32,7 +32,7 @@
     <Option Name="DSAVendor" Val="xilinx"/>
     <Option Name="DSABoardId" Val="cmod_a7-35t"/>
     <Option Name="DSANumComputeUnits" Val="60"/>
-    <Option Name="WTXSimLaunchSim" Val="35"/>
+    <Option Name="WTXSimLaunchSim" Val="58"/>
     <Option Name="WTModelSimLaunchSim" Val="0"/>
     <Option Name="WTQuestaLaunchSim" Val="0"/>
     <Option Name="WTIesLaunchSim" Val="0"/>
     </FileSet>
     <FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1">
       <Filter Type="Srcs"/>
+      <File Path="$PSRCDIR/sim_1/new/testbench.v">
+        <FileInfo>
+          <Attr Name="UsedIn" Val="synthesis"/>
+          <Attr Name="UsedIn" Val="implementation"/>
+          <Attr Name="UsedIn" Val="simulation"/>
+        </FileInfo>
+      </File>
       <File Path="$PPRDIR/forcefader_ts.wcfg">
         <FileInfo>
           <Attr Name="UsedIn" Val="simulation"/>
       </File>
       <Config>
         <Option Name="DesignMode" Val="RTL"/>
-        <Option Name="TopModule" Val="forcefader"/>
+        <Option Name="TopModule" Val="testbench"/>
         <Option Name="TopLib" Val="xil_defaultlib"/>
         <Option Name="TopAutoSet" Val="TRUE"/>
         <Option Name="TransportPathDelay" Val="0"/>
index 2147f00d4d14cec48c0cae2090fcfe9f72b18162..d90501d7118cde46d5d5e5a6328c348af29ac6e8 100644 (file)
    <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>