<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_%28%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC%29%2F%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_%28%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%29%2FExample</id>
		<title>Спец курс (Верификация цифровых схем)/Ссылки (раздел)/Example - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_%28%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC%29%2F%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_%28%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%29%2FExample"/>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC)/%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_(%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB)/Example&amp;action=history"/>
		<updated>2026-07-21T04:19:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://www.simhard.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC)/%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_(%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB)/Example&amp;diff=6777&amp;oldid=prev</id>
		<title>Vidokq в 15:54, 6 сентября 2020</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC)/%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_(%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB)/Example&amp;diff=6777&amp;oldid=prev"/>
				<updated>2020-09-06T15:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:54, 6 сентября 2020&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{ВЦС TOC}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//----------------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//----------------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vidokq</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC)/%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_(%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB)/Example&amp;diff=6774&amp;oldid=prev</id>
		<title>Vidokq: Новая страница: «&lt;source lang=&quot;verilog&quot;&gt; //---------------------------------------------------------------------- //   Copyright 2020 Mentor Graphics Corporation // //   All Right…»</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%85%D0%B5%D0%BC)/%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_(%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB)/Example&amp;diff=6774&amp;oldid=prev"/>
				<updated>2020-09-06T15:53:39Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&amp;lt;source lang=&amp;quot;verilog&amp;quot;&amp;gt; //---------------------------------------------------------------------- //   Copyright 2020 Mentor Graphics Corporation // //   All Right…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
//----------------------------------------------------------------------&lt;br /&gt;
//   Copyright 2020 Mentor Graphics Corporation&lt;br /&gt;
//&lt;br /&gt;
//   All Rights Reserved Worldwide&lt;br /&gt;
//&lt;br /&gt;
//   Licensed under the Apache License, Version 2.0 (the&lt;br /&gt;
//   &amp;quot;License&amp;quot;); you may not use this file except in&lt;br /&gt;
//   compliance with the License.  You may obtain a copy of&lt;br /&gt;
//   the License at&lt;br /&gt;
//&lt;br /&gt;
//       http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
//&lt;br /&gt;
//   Unless required by applicable law or agreed to in&lt;br /&gt;
//   writing, software distributed under the License is&lt;br /&gt;
//   distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR&lt;br /&gt;
//   CONDITIONS OF ANY KIND, either express or implied.  See&lt;br /&gt;
//   the License for the specific language governing&lt;br /&gt;
//   permissions and limitations under the License.&lt;br /&gt;
//----------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------&lt;br /&gt;
//  Welcome to Mentor's Systemverilog Race Condition Challenge!!&lt;br /&gt;
// --------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// Instructions:&lt;br /&gt;
//&lt;br /&gt;
// For each of the 10 race conditions below:&lt;br /&gt;
//   * identify the race&lt;br /&gt;
//   * re-code to remove the race&lt;br /&gt;
//&lt;br /&gt;
// Check your answers at: blogs.mentor.com/verificationhorizons&lt;br /&gt;
//&lt;br /&gt;
// NOTE: this is a Systemverilog static analysis exercise. You don't&lt;br /&gt;
//       *need* to run the code to complete it (in fact it's better&lt;br /&gt;
//       if you don't run it!) But if you do want to run it, you'll&lt;br /&gt;
//       need a validated account to access Questasim.&lt;br /&gt;
//&lt;br /&gt;
//----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module Mentor_race_condition_challenge (&lt;br /&gt;
  output byte basket,&lt;br /&gt;
  output logic ping,&lt;br /&gt;
  output byte football,&lt;br /&gt;
  output byte beach_ball,&lt;br /&gt;
  output bit throw,&lt;br /&gt;
  output byte baseball,&lt;br /&gt;
  output byte hockey,&lt;br /&gt;
  output bit[3:0] cricket,&lt;br /&gt;
  output byte muscles&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
  bit clk;&lt;br /&gt;
  initial forever clk = #5 ~clk;&lt;br /&gt;
&lt;br /&gt;
  //---------------------------------------&lt;br /&gt;
  // Race #1&lt;br /&gt;
  //&lt;br /&gt;
  // Blocking and non-blocking assignments&lt;br /&gt;
  //---------------------------------------&lt;br /&gt;
  byte slam;&lt;br /&gt;
  bit dunk;&lt;br /&gt;
  initial begin&lt;br /&gt;
    forever begin&lt;br /&gt;
      @(posedge clk);&lt;br /&gt;
      dunk = ~dunk;&lt;br /&gt;
      slam += dunk;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  always @(posedge clk) basket &amp;lt;= slam + dunk;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #2&lt;br /&gt;
  //&lt;br /&gt;
  // Unknowns at initialization&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  logic pong;&lt;br /&gt;
  initial begin&lt;br /&gt;
    fork&lt;br /&gt;
      forever begin&lt;br /&gt;
        @(posedge clk);&lt;br /&gt;
        if (pong) ping = 0;&lt;br /&gt;
        else      ping = 1;&lt;br /&gt;
      end&lt;br /&gt;
      forever begin&lt;br /&gt;
        @(posedge clk);&lt;br /&gt;
        if (ping) pong = 0;&lt;br /&gt;
        else      pong = 1;&lt;br /&gt;
      end&lt;br /&gt;
    join_none&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //---------------------------------------&lt;br /&gt;
  // Race #3&lt;br /&gt;
  //&lt;br /&gt;
  // Procedural and continuous assignments&lt;br /&gt;
  //---------------------------------------&lt;br /&gt;
  byte colours, stripes, bouncy;&lt;br /&gt;
  always @(posedge clk) stripes += 1;&lt;br /&gt;
  always begin&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    colours += 1;&lt;br /&gt;
    beach_ball = bouncy;&lt;br /&gt;
  end&lt;br /&gt;
  assign bouncy = colours &amp;amp;&amp;amp; stripes;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #4&lt;br /&gt;
  //&lt;br /&gt;
  // Incomplete sensitivity list&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  bit score;&lt;br /&gt;
  byte fieldgoal, touchdown;&lt;br /&gt;
  byte down;&lt;br /&gt;
  always @(posedge clk) begin&lt;br /&gt;
    if (down &amp;lt; 4) begin&lt;br /&gt;
      score &amp;lt;= 1;&lt;br /&gt;
      fieldgoal &amp;lt;= fieldgoal + 3;&lt;br /&gt;
      touchdown &amp;lt;= touchdown + 7;&lt;br /&gt;
      down &amp;lt;= down + 1;&lt;br /&gt;
    end&lt;br /&gt;
    else begin&lt;br /&gt;
      score &amp;lt;= 0;&lt;br /&gt;
      down &amp;lt;= 0;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  always @(score) football = fieldgoal + touchdown;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //------------------------------------&lt;br /&gt;
  // Race #5&lt;br /&gt;
  //&lt;br /&gt;
  // fork/join* that don't consume time&lt;br /&gt;
  //------------------------------------&lt;br /&gt;
  bit shot_put;&lt;br /&gt;
  bit javelin;&lt;br /&gt;
  initial begin&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    fork&lt;br /&gt;
      shot_put = $random();&lt;br /&gt;
      javelin = $random();&lt;br /&gt;
    join_none&lt;br /&gt;
&lt;br /&gt;
    @(shot_put or javelin)&lt;br /&gt;
      throw = (shot_put || javelin);&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-----------------------------------&lt;br /&gt;
  // Race #6&lt;br /&gt;
  //&lt;br /&gt;
  // assignments in more than 1 thread&lt;br /&gt;
  //-----------------------------------&lt;br /&gt;
&lt;br /&gt;
  bit single, double, triple, homerun, cycle;&lt;br /&gt;
  initial begin&lt;br /&gt;
    forever begin&lt;br /&gt;
      @(posedge clk);&lt;br /&gt;
      single = $urandom_range(0,10) &amp;gt; 1;&lt;br /&gt;
      double = $urandom_range(0,10) &amp;gt; 2;&lt;br /&gt;
      triple = $urandom_range(0,10) &amp;gt; 4;&lt;br /&gt;
      homerun = $urandom_range(0,10) &amp;gt; 8;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  initial begin&lt;br /&gt;
    forever begin &lt;br /&gt;
      #1 cycle = &amp;amp; { single, double, triple, homerun };&lt;br /&gt;
      @(posedge clk);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  always @(posedge clk) begin&lt;br /&gt;
    #1 baseball = baseball + homerun;&lt;br /&gt;
    if (cycle) begin&lt;br /&gt;
      #0 cycle = 0;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #7&lt;br /&gt;
  //&lt;br /&gt;
  // Edge sensitive events&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  bit [3:0] goal;&lt;br /&gt;
  always @(posedge clk) goal += 2;&lt;br /&gt;
  initial begin&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    @(goal == 2) hockey = 1;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #8&lt;br /&gt;
  //&lt;br /&gt;
  // Named events&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  event wicket, batsman;&lt;br /&gt;
  initial begin&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    fork&lt;br /&gt;
      forever begin&lt;br /&gt;
        @batsman;&lt;br /&gt;
        repeat (cricket+1) @(posedge clk);&lt;br /&gt;
        -&amp;gt;wicket;&lt;br /&gt;
      end&lt;br /&gt;
      forever begin&lt;br /&gt;
        -&amp;gt;batsman;&lt;br /&gt;
        @wicket;&lt;br /&gt;
        cricket += 1;&lt;br /&gt;
      end&lt;br /&gt;
    join_none&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #9&lt;br /&gt;
  //&lt;br /&gt;
  // NBA functions&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  bit [3:0] bump, spike, side_out;&lt;br /&gt;
  function bit [3:0] set(bit [3:0] _bump);&lt;br /&gt;
    set &amp;lt;= _bump ^ (_bump &amp;lt;&amp;lt; 1);&lt;br /&gt;
  endfunction&lt;br /&gt;
&lt;br /&gt;
  initial begin&lt;br /&gt;
    forever begin&lt;br /&gt;
      @(posedge clk);&lt;br /&gt;
      bump += 1;&lt;br /&gt;
      spike = set(bump);&lt;br /&gt;
      side_out = bump &amp;lt; spike ? spike : 0;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  // Race #10&lt;br /&gt;
  //&lt;br /&gt;
  // Procedural force/release&lt;br /&gt;
  //-------------------------------&lt;br /&gt;
  byte pushups, situps, reps;&lt;br /&gt;
  assign situps = 3 + pushups;&lt;br /&gt;
  always @(posedge clk) reps &amp;lt;= reps + 1;&lt;br /&gt;
  always begin&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    pushups += reps;&lt;br /&gt;
    force situps = 0;&lt;br /&gt;
&lt;br /&gt;
    @(posedge clk);&lt;br /&gt;
    release situps;&lt;br /&gt;
    muscles = pushups + situps;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  initial #300 $finish();&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vidokq</name></author>	</entry>

	</feed>