<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0cFQXo9fip7ImA9WhRaE0U.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232</id><updated>2012-02-16T00:30:10.466-08:00</updated><category term="PrimeTime" /><category term="Previous Interview Questions" /><category term="PLL" /><category term="C++" /><category term="SVA" /><category term="ASIC Gate" /><category term="ASIC Flow" /><category term="Verilog Interview Questions" /><category term="ASIC timing" /><category term="perl" /><category term="Networking" /><category term="Memory Interface" /><category term="Design Complier" /><category term="ASIC Logic" /><category term="ASIC SystemVerilog" /><category term="ASIC Verification" /><title>ASIC interview Question &amp; Answer</title><subtitle type="html">A blog to collect the interview questions and answer for ASIC related positions</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://asic-interview.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AsicInterviewQuestionAnswer" /><feedburner:info uri="asicinterviewquestionanswer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkMDRHk8fip7ImA9Wx5bGEo.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8457770912347193846</id><published>2010-11-04T06:47:00.000-07:00</published><updated>2010-11-04T06:47:55.776-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-04T06:47:55.776-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Q&amp;A</title><content type="html">1.&amp;nbsp; What's difference between static and automatic task/program?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If you use static task for multiple places in your testbench,&amp;nbsp; the local variables will share the common, static storage. In this case, different threads will step on each other's values.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; By using atuotmic storage, it will make a copy of local variables and use them. Not a common static storage any more.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; e.g.&amp;nbsp; program automatic initialization;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ......&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endprogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. What's the packed array and unpacked array?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; unpacked array is an array with gap between variables.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; e.g.&amp;nbsp; bit[7:0]&amp;nbsp; b_unpack[3];&amp;nbsp;&amp;nbsp; // unpacked&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Te system verilog simulators store each element on a 32-bit word boundary. In other words, you are using only lower 8 bits, the other 24 bits per word space is wasted.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Packed array is an array without gap. Unpacked array is good for local individual variable access. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; e.g. bit[3:0] [7:0] bytes; // 4 bytes packed into 32 bits&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; In this case, all 32 bits word are packed with 4 bytes. A packed array is handy if you need to convert to and from scalars. &lt;br /&gt;
&lt;br /&gt;
3.&amp;nbsp; What's different between logic and wire?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logic and wire are almost the same except wire can be driven by multiple sources. Logic can only driven by single source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8457770912347193846?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NZcYcyoYPenMgIjL2YcGEb-yGnk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NZcYcyoYPenMgIjL2YcGEb-yGnk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NZcYcyoYPenMgIjL2YcGEb-yGnk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NZcYcyoYPenMgIjL2YcGEb-yGnk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/Qdq6Prip7so" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8457770912347193846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/11/systemverilog-q.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8457770912347193846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8457770912347193846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/Qdq6Prip7so/systemverilog-q.html" title="SystemVerilog Q&amp;A" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/11/systemverilog-q.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFSXo_eyp7ImA9Wx5bGEo.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-7153192189801135713</id><published>2010-10-31T08:01:00.000-07:00</published><updated>2010-11-04T06:25:18.443-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-04T06:25:18.443-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SVA" /><title>Systemverilog Assertion (SVA) 2</title><content type="html">Working Assertion Examples:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Normal inline assertion example:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoPlainText"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;assertStateStartShortFalse:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;nbsp; assert property (@(posedge clk) disable iff(!reset_n)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;nbsp; (state==`START) |-&amp;gt; (short==FALSE))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;nbsp; else $display("Error state START and short is true&amp;nbsp; ");&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Normal Assertion compile with VCS with +assert option&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;// Assertion example for parity checking&lt;/b&gt;&lt;br /&gt;
module check_par(clk, parity, data);&lt;br /&gt;
input clk, parity;&lt;br /&gt;
input [31:0] data;&lt;br /&gt;
&lt;br /&gt;
property p_check_par;&lt;br /&gt;
@(posedge clk)&amp;nbsp; (^(data^parity)) == 1’b0;&lt;br /&gt;
endproperty&lt;br /&gt;
a_check_par: assert property(p_check_par);&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
binddata_bus check_par u1(clk, parity, data);&lt;br /&gt;
bindtop.mid.u1 check_par u2(clk, parity, data);&lt;br /&gt;
&lt;br /&gt;
For OVL, use +define+OVL_ASSERT_ON for OVL. &lt;br /&gt;
&lt;span class="cBold"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="cBold"&gt;ovl_even_parity&lt;/span&gt; &lt;br /&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=3787854007361038232&amp;amp;postID=7153192189801135713" name="wp788561"&gt;&lt;/a&gt;&lt;br /&gt;
[#(&lt;span class="cItalic"&gt;severity_level&lt;/span&gt;,&lt;span class="cItalic"&gt; width&lt;/span&gt;,&lt;span class="cItalic"&gt; property_type&lt;/span&gt;,&lt;span class="cItalic"&gt; msg&lt;/span&gt;,&lt;span class="cItalic"&gt; coverage_level, &lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=3787854007361038232&amp;amp;postID=7153192189801135713" name="wp839791"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="cItalic"&gt;         clock_edge, reset_polarity, gating_type&lt;/span&gt;)] &lt;br /&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=3787854007361038232&amp;amp;postID=7153192189801135713" name="wp788562"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="cItalic"&gt;instance_name&lt;/span&gt; (&lt;span class="cItalic"&gt;clock, reset, enable, test_expr, fire&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
ovl_even_parity top.u1(clk, reset, 1, (^(data^parity)));&lt;br /&gt;
&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-7153192189801135713?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pt37R0qNwKWv_WYe_0cepgTCREs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pt37R0qNwKWv_WYe_0cepgTCREs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pt37R0qNwKWv_WYe_0cepgTCREs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pt37R0qNwKWv_WYe_0cepgTCREs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/mSIHWirdbco" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/7153192189801135713/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/10/systemverilog-assertion-sva-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/7153192189801135713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/7153192189801135713?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/mSIHWirdbco/systemverilog-assertion-sva-2.html" title="Systemverilog Assertion (SVA) 2" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/10/systemverilog-assertion-sva-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQHRHc9eCp7ImA9Wx5bFU4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-4989761107725692967</id><published>2010-10-31T07:12:00.000-07:00</published><updated>2010-10-31T07:12:15.960-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-31T07:12:15.960-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SVA" /><title>SVA ( System verilog Assertion)</title><content type="html">1.&amp;nbsp; What are difference between SVA and other assertions?&lt;br /&gt;
&lt;br /&gt;
Answer: Systemverilog Assertions (SVA) are temporal, Declarative and formal friendly.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Temporal : Design Variables relationship in time&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Declarative: Orthogonal to procedural form in design (describe what instead of how )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Synthesizable: Good for dynamic and formal verification.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SVA provides interoperability with RTL, testbench features and functional coverage.&lt;br /&gt;
&lt;br /&gt;
2.&amp;nbsp; What are the benefits of using assertions?&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
Answer:&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1) Improve error detection&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2) Better observability&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3) Shortens debug time&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
3. Who writes Assertions?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Answer:&amp;nbsp; White box (Designers)&amp;nbsp; , Black box (DV)&lt;br /&gt;
&lt;br /&gt;
4.&amp;nbsp; How many ways to connect assertion to RTL?&lt;br /&gt;
&lt;br /&gt;
Answer: There are 3 ways to connect assertion to RTL: inline, Instantiation and Virtual Instantiation (bind).&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inline Assertion:&amp;nbsp; Assertion directly put into the RTL by designer. Use compile option for synthesis. &lt;br /&gt;
&lt;br /&gt;
For example:&amp;nbsp; &lt;br /&gt;
// A synchronous D Flip-Flop&lt;br /&gt;
moduledff (input logic [7:0] D, input RST_, input CLK, output logic [7:0] Q);&lt;br /&gt;
always @(posedge CLK)&lt;br /&gt;
if (!RST_) Q&amp;lt;= 8'h0;&lt;br /&gt;
else Q &amp;lt;= D;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;// assertions &lt;/div&gt;&lt;span style="color: red;"&gt;propertyd_q_property_0 (clk, rst_, q);&lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;span style="color: red;"&gt;@(posedge clk) !rst_ |-&amp;gt;##1(q == 8'h0);&lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;span style="color: red;"&gt;endproperty&lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;span style="color: red;"&gt;assert_d_q_property_0 : assert property(d_q_property_0(CLK, RST_, Q));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
Assertion Instantiation: Put assertion into another module and use it again by RTL designers. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
moduledff (input logic [7:0] D, input RST_, input CLK, output logic [7:0] Q);&lt;br /&gt;
always @(posedge CLK)&lt;br /&gt;
if (!RST_) Q&amp;lt;= 8'h0;&lt;br /&gt;
else Q &amp;lt;= D;&lt;br /&gt;
&lt;br /&gt;
// Use assertion module here &lt;br /&gt;
&lt;span style="color: red;"&gt;dffChecker #(8) Chk0(CLK, RST_, D, Q);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background-color: white;"&gt;endmodule &lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;span style="color: black;"&gt;moduledffChecker (clk, rst_, d, q);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;parameter WIDTH = 8;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;input clk, rst_;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;input [WIDTH-1:0] d, q;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;propertyd_q_property_0;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;@(posedge clk) !rst_ |-&amp;gt;##1 (q == 8'h0);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;endproperty&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;assert_d_q_property_0 : assert property(d_q_property_0);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;endmodule&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Virtual Instantiation (bind): Use bind method to connection both modules together. It's a saftest method for DV because it did not change RTLs. Plus we can use OVL for most of common checkers.&lt;br /&gt;
&lt;br /&gt;
For examples:&lt;br /&gt;
&lt;div style="color: red;"&gt;binddff dffChecker #(8) Chk0(CLK, RST_, D, Q);&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-4989761107725692967?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nv7ULRLeqXp3Z5zRa5D7SYLHlQQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nv7ULRLeqXp3Z5zRa5D7SYLHlQQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nv7ULRLeqXp3Z5zRa5D7SYLHlQQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nv7ULRLeqXp3Z5zRa5D7SYLHlQQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/WXKyOv1jvkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/4989761107725692967/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/10/sva-system-verilog-assertion.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4989761107725692967?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4989761107725692967?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/WXKyOv1jvkc/sva-system-verilog-assertion.html" title="SVA ( System verilog Assertion)" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/10/sva-system-verilog-assertion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUDQno7fyp7ImA9WxFWF0g.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8074488022878257223</id><published>2010-06-05T08:04:00.000-07:00</published><updated>2010-06-05T08:04:33.407-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-05T08:04:33.407-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Interview Questions</title><content type="html">1.&amp;nbsp;&amp;nbsp; How many array types in SystemVerilog? How do you use them?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array_name[ ]&amp;nbsp; dynamic array&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g . &amp;nbsp; dyna_arr_1 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;[&lt;/span&gt;&lt;span style="color: magenta;"&gt;100&lt;/span&gt;&lt;span style="color: slateblue;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;dyna_arr_1&lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dyna_arr_2 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;[&lt;/span&gt;&lt;span style="color: magenta;"&gt;4&lt;/span&gt;&lt;span style="color: slateblue;"&gt;](&lt;/span&gt;'&lt;span style="color: slateblue;"&gt;{&lt;/span&gt;&lt;span style="color: magenta;"&gt;4&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&lt;span style="color: magenta;"&gt;5&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&lt;span style="color: magenta;"&gt;6&lt;/span&gt;&lt;span style="color: slateblue;"&gt;});&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;// elements are {4,5,6,0}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array [5]&amp;nbsp;&amp;nbsp;&amp;nbsp; fixed array&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; e.g.&amp;nbsp;&amp;nbsp; register1 &lt;span style="color: slateblue;"&gt;[&lt;/span&gt;&lt;span style="color: magenta;"&gt;6&lt;/span&gt;&lt;span style="color: slateblue;"&gt;][&lt;/span&gt;&lt;span style="color: magenta;"&gt;7&lt;/span&gt;&lt;span style="color: slateblue;"&gt;:&lt;/span&gt;&lt;span style="color: magenta;"&gt;0&lt;/span&gt;&lt;span style="color: slateblue;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;`1&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: slateblue;"&gt;&amp;nbsp;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array[$]&amp;nbsp;&amp;nbsp; queue&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; e.g.&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;q&lt;span style="color: slateblue;"&gt;[&lt;/span&gt;$&lt;span style="color: slateblue;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;{&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;2&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;4&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;};&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: slateblue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;q &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;{};&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;// clear the queue (delete all items)&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;e &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;q&lt;span style="color: slateblue;"&gt;[&lt;/span&gt;&lt;span style="color: magenta;"&gt;0&lt;/span&gt;&lt;span style="color: slateblue;"&gt;];&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;//&amp;nbsp;&amp;nbsp;read the first (leftmost) item&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;q&lt;span style="color: slateblue;"&gt;[&lt;/span&gt;$&lt;span style="color: slateblue;"&gt;];&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;//&amp;nbsp;&amp;nbsp;read  the last (rightmost) item&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array[string] or array[%] associate array&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g.&amp;nbsp; &lt;span style="color: blue;"&gt;//associative array of 4-state integers indexed by  strings, default is '1.&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;integer&lt;/b&gt;&lt;/span&gt;&amp;nbsp;tab &lt;span style="color: slateblue;"&gt;[&lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/span&gt;&lt;span style="color: slateblue;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;'&lt;span style="color: slateblue;"&gt;{&lt;/span&gt;&lt;span style="color: magenta;"&gt;"Peter"&lt;/span&gt;&lt;span style="color: slateblue;"&gt;:&lt;/span&gt;&lt;span style="color: magenta;"&gt;20&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;"Paul"&lt;/span&gt;&lt;span style="color: slateblue;"&gt;:&lt;/span&gt;&lt;span style="color: magenta;"&gt;22&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;"Mary"&lt;/span&gt;&lt;span style="color: slateblue;"&gt;:&lt;/span&gt;&lt;span style="color: magenta;"&gt;23&lt;/span&gt;&lt;span style="color: slateblue;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;default&lt;/b&gt;&lt;/span&gt;&lt;span style="color: slateblue;"&gt;:-&lt;/span&gt;&lt;span style="color: magenta;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: slateblue;"&gt;};&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
2)&amp;nbsp; What is the Polymorphism?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #222222;"&gt;Polymorphism allows an entity to take a variety of  representations. Polymorphism means the ability to request that the  same Operations&amp;nbsp;&amp;nbsp;be performed by a wide range of different types of  things. Effectively, this means that you can ask many different objects  to perform the same action.&amp;nbsp;&amp;nbsp;Override polymorphism is an override of  existing code. Subclasses of existing classes are given a "replacement  method" for methods in the superclass. Superclass objects may also use  the replacement methods when dealing with objects of the subtype. The  replacement method that a subclass provides has exactly the same  signature as the original method in the superclass.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;EXAMPLE: with virtual&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;A &lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;virtual&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;task&lt;/b&gt;&lt;/span&gt;&amp;nbsp;disp  &lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&lt;span style="color: magenta;"&gt;" This is class A "&lt;/span&gt;&lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;endtask&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endclass&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;EA&lt;/span&gt;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/span&gt;&amp;nbsp;A &lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;task&lt;/b&gt;&lt;/span&gt;&amp;nbsp;disp &lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&lt;span style="color: magenta;"&gt;" This is Extended class A  "&lt;/span&gt;&lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endtask&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endclass&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;program&lt;/b&gt;&lt;/span&gt;&amp;nbsp;main &lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: magenta;"&gt;EA&lt;/span&gt;&amp;nbsp;my_ea&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A my_a&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;initial&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_a &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;disp&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_ea &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_a &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;my_ea&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;disp&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endprogram&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;RESULTS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;This is class A &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;This is Extended class A&lt;/span&gt;&lt;span style="color: #222222;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;3)&amp;nbsp; how the copy works?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;Answers:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; There are 2 types of copy. Show copy or deep copy&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For example:&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class B;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endclass&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #776a6a;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;program&lt;/b&gt;&lt;/span&gt;&amp;nbsp;main&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;initial&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B b2&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b1 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;123&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b2 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // b1 and b2 point to the same memory. The properties did not get copied.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;endprogram&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;RESULTS:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;123&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;span style="color: #222222;"&gt;A shallow copy of an object copies all of the  member field values. &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;program&lt;/b&gt;&lt;/span&gt;&amp;nbsp;main&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;initial&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B b2&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;123&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b2 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // shallow copy of b1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;321&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: brown;"&gt;&lt;b&gt;endprogram&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;RESULTS:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;123&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;321&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;If the value of b1 change, it will also change the value of b1. It's because it's pointing to the same memory.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;To avoid this, we need to use the deep copy.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #25383c;"&gt;&lt;b&gt;&lt;u&gt;Deep Copy   &lt;/u&gt;&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #222222;"&gt;A deep copy copies all  fields, and makes copies of dynamically allocated memory pointed to by  the fields. To make a deep copy, you must write a copy constructor and  overload the assignment operator, otherwise the copy will point to the  original, with disasterous consequences.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;EXAMPLE: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;A&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;i&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endclass&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;B&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A a&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;task&lt;/b&gt;&lt;/span&gt;&amp;nbsp;copy&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;A a&lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&amp;nbsp;a&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endtask&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endclass&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;program&lt;/b&gt;&lt;/span&gt;&amp;nbsp;main&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;initial&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B b2&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&lt;span style="color: slateblue;"&gt;();&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i  &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;123&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b2 &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: darkcyan;"&gt;new&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;copy&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i  &lt;span style="color: slateblue;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: magenta;"&gt;321&lt;/span&gt;&lt;span style="color: slateblue;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b1&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a020f0;"&gt;$display&lt;/span&gt;&lt;span style="color: slateblue;"&gt;(&lt;/span&gt;&amp;nbsp;b2&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;a&lt;span style="color: slateblue;"&gt;.&lt;/span&gt;i &lt;span style="color: slateblue;"&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: brown;"&gt;&lt;b&gt;endprogram&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&lt;b&gt;RESULTS:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;123&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;123&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;321&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #776a6a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;123&lt;/span&gt;&lt;span style="color: #222222;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8074488022878257223?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0mkfs5KWa5eqPxt4y8l78TBV_WA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0mkfs5KWa5eqPxt4y8l78TBV_WA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0mkfs5KWa5eqPxt4y8l78TBV_WA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0mkfs5KWa5eqPxt4y8l78TBV_WA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/gJA_QxU8rFs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8074488022878257223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/06/systemverilog-interview-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8074488022878257223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8074488022878257223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/gJA_QxU8rFs/systemverilog-interview-questions.html" title="SystemVerilog Interview Questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/06/systemverilog-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcEQH4-fip7ImA9WxFWFU0.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8706817350551003784</id><published>2010-06-02T10:33:00.000-07:00</published><updated>2010-06-02T10:33:21.056-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T10:33:21.056-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Verilog Interview Questions" /><title>New interview questions</title><content type="html">1) There is a waveform&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; in _____|====|________&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; out_____|=|___|=|______&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; The output is "high" when the input change the value.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Verilog code&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; always@(posedge clk or reset)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!reset)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; begin &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_reg &amp;lt;= 1'b0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initial value&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;= 1'b0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(in != in_reg)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out &amp;lt;= 1'b1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_reg &amp;lt;= in;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out &amp;lt;= 1'b0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; After synthesis, what will it be look like?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; It's like a D-FF and a XOR&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; in -----D_FF------in_reg---|XOR|&amp;nbsp; ___&amp;nbsp;&amp;nbsp; out&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |__________________|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp;&amp;nbsp; How to write a C or C++ code for Strlen&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int strlen (char *s)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int len =0; *s='\0'; s++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (len);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Use recurve way&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int strlen_r (char *s)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(*s='\0')&amp;nbsp; return 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp; return (1 + strlen_r(s+1)); &amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8706817350551003784?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gjopKIWuOggxvokkwXX6lwDEXYM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gjopKIWuOggxvokkwXX6lwDEXYM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gjopKIWuOggxvokkwXX6lwDEXYM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gjopKIWuOggxvokkwXX6lwDEXYM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/shZzUiPXXN0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8706817350551003784/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/06/new-interview-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8706817350551003784?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8706817350551003784?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/shZzUiPXXN0/new-interview-questions.html" title="New interview questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/06/new-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBR3oycSp7ImA9WxFWEkk.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-5442082400454716410</id><published>2010-05-30T12:17:00.000-07:00</published><updated>2010-05-30T12:17:36.499-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-30T12:17:36.499-07:00</app:edited><title>C++ basic interview questions</title><content type="html">1) How do you swap two integers? Without another variable?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; example main.cpp&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; void main()&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int a=2, b=3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swap (a, b);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; swap ( int &amp;amp;a, int &amp;amp;b)&amp;nbsp;&amp;nbsp; // pass by reference&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int tmp = a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; a = b;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; b = tmp;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Without a third variable&lt;br /&gt;
&amp;nbsp;&amp;nbsp; swap ( int &amp;amp;a, int &amp;amp;b)&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = a +b;&amp;nbsp;&amp;nbsp; // a = 2 +3 =5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = a-b;&amp;nbsp;&amp;nbsp;&amp;nbsp; // b = 5-3 =2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = a -b;&amp;nbsp;&amp;nbsp; // a = 5 - 2 = 3, a and b swap &lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; template &amp;lt; class T&amp;gt;&lt;br /&gt;
&amp;nbsp; void swap ( T &amp;amp;a, T &amp;amp;b)&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T tmp =a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = b;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = tmp;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; use swap (a, b ) to call the swap. It can swap any data type.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-5442082400454716410?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/05z03QhTMB8mSwuoIu8mvyP6-gg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05z03QhTMB8mSwuoIu8mvyP6-gg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/05z03QhTMB8mSwuoIu8mvyP6-gg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05z03QhTMB8mSwuoIu8mvyP6-gg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/z8OR6xfNbYA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/5442082400454716410/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/05/c-basic-interview-questions.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5442082400454716410?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5442082400454716410?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/z8OR6xfNbYA/c-basic-interview-questions.html" title="C++ basic interview questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/05/c-basic-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGRXY5eyp7ImA9WxFWEkk.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-5754562716914377614</id><published>2010-05-30T09:28:00.000-07:00</published><updated>2010-05-30T11:43:44.823-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-30T11:43:44.823-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>C++ Interview algorithms questions</title><content type="html">1) Reverse a single linked list&lt;br /&gt;
&lt;br /&gt;
Answer code:&lt;br /&gt;
&lt;br /&gt;
Node* ReverseList(Node ** List)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Provide a link list&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Declare 3 pointer variable&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Node *head&amp;nbsp;&amp;nbsp; =&amp;nbsp; *List;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Node *temp2 = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Node *temp3 =NULL;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(head)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *List = head; // set the head to last node&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp2 = head-&amp;gt;pNext;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // save the next ptr in the temp2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; head-&amp;gt;pNext = temp3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // change next to previous &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp3 = head;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; head = temp2;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Diagram detail:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; List linked list&amp;nbsp; [ 1 ] -&amp;gt;&amp;nbsp;&amp;nbsp; [ 2 ] -&amp;gt;&amp;nbsp;&amp;nbsp; [ 3 ] -&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *List= head;&amp;nbsp; // Set head point to the last node&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; temp2 = head-&amp;gt;pNext; // &amp;nbsp; saved as temp2 &amp;nbsp; ( temp2 point to ptr2 )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 3) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; head -&amp;gt; pNext = temp3;&amp;nbsp; // at the first round, it point to the null &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp3 = head;&amp;nbsp;&amp;nbsp; // set temp3 as head&amp;nbsp;&amp;nbsp; ( temp3 point to ptr1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; head = temp2; &amp;nbsp; // get back the temp2 location ( head point to ptr2 )&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; second round&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *List= head;&amp;nbsp; // Set head point to the last node ( head to ptr2 )&lt;br /&gt;
&amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 7) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; temp2 = head-&amp;gt;pNext; // &amp;nbsp; saved as temp2 &amp;nbsp; (  temp2 point to ptr3 )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 8) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; head -&amp;gt; pNext =  temp3;&amp;nbsp; // at the second round, it point ptr 1 &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp3 = head;&amp;nbsp;&amp;nbsp; // set temp3 as head&amp;nbsp;&amp;nbsp; ( temp3 point to ptr2 )&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; head = temp2; &amp;nbsp; // get back the temp2  location ( head point to ptr3 )&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
2) Delete a node in double linked list&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Doubly linked lists are like singly linked lists, except each node has two pointers -- one to the next node, and one to the previous node.  This makes life nice in many ways:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt; You can traverse lists forward and backward. &lt;/li&gt;
&lt;li&gt; You can insert anywhere in a list easily.  This includes      inserting before a node, after a node, at the front of      the list, and at the end of the list. &lt;/li&gt;
&lt;li&gt; You can delete nodes very easily. &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void deleteNode( Node *n)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node *np = n-&amp;gt;prev;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set np pointer to the n-&amp;gt;prev &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node *nn = n-&amp;gt;next;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set nn pointer to the n-&amp;gt;next &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; np-&amp;gt;next = n-&amp;gt;next;&amp;nbsp;&amp;nbsp;&amp;nbsp; // skip n node &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nn-&amp;gt;prev = n-&amp;gt;prev;&amp;nbsp;&amp;nbsp;&amp;nbsp; // skip n node&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete n;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Diagram:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; np ]&amp;nbsp; -&amp;gt;&amp;nbsp; [ n&amp;nbsp; ] -&amp;gt;&amp;nbsp; [ nn&amp;nbsp; ] -&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;3)&amp;nbsp; Sort a linked list&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Sorting in descending order&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct node&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node* NEXT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; // start the sorting&lt;br /&gt;
&amp;nbsp;&amp;nbsp; sort (node *head)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pass the linklist head to the function&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node* first, second, temp; &amp;nbsp; // define 3 nodes variable&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; first = head;&amp;nbsp;&amp;nbsp; // set first as head&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(first!=null)&amp;nbsp;&amp;nbsp; // check first is not empty link list&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; second = first-&amp;gt;NEXT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(second !=null ) &amp;nbsp; // check the end of linked list &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(first-&amp;gt;value &amp;lt; second-&amp;gt;value)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = new node();&amp;nbsp; // allocate memory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp-&amp;gt;value = first-&amp;gt;value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; first-&amp;gt;value = second-&amp;gt;value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; second-&amp;gt;value = temp-&amp;gt;value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete temp;&amp;nbsp;&amp;nbsp; // release the memory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; second= second-&amp;gt;NEXT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; first=first-&amp;gt;NEXT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Reverse a string&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void ReverseString ( char *String)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *Begin = String;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set up 2 pointer, one for the beginning of the spring address&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *End = String + strlen(String) -1;&amp;nbsp;&amp;nbsp; // point to the end of the spring address&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char tempChar ='\0';&amp;nbsp;&amp;nbsp;&amp;nbsp; // end of line &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Begin &amp;lt; End)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempChar = *Begin;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; *Begin = *End;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *End = *TempChar;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End--;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-5754562716914377614?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6f8NNYBHRrcvf5YfSYno0q1XRKI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6f8NNYBHRrcvf5YfSYno0q1XRKI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6f8NNYBHRrcvf5YfSYno0q1XRKI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6f8NNYBHRrcvf5YfSYno0q1XRKI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/UAnZ681fbgc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/5754562716914377614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/05/c-interview-algorithms-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5754562716914377614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5754562716914377614?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/UAnZ681fbgc/c-interview-algorithms-questions.html" title="C++ Interview algorithms questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/05/c-interview-algorithms-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDQn49fyp7ImA9WxFSGUw.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-1432947986593729420</id><published>2010-04-21T21:29:00.000-07:00</published><updated>2010-04-21T21:29:33.067-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T21:29:33.067-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Interview Question 9</title><content type="html">1)&amp;nbsp; How to kill a process in fork/join?&lt;br /&gt;
&lt;br /&gt;
The kill() task terminates the given process and all its sub-processes, that is, processes spawned using fork statements by the process being killed. If the process to be terminated is not blocked waiting on some other condition, such as an event, wait expression, or a delay then the process shall be terminated at some unspecified time in the current time step.&lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp; What is cross coverage ?&lt;br /&gt;
&lt;br /&gt;
Cross allows keeping track of information which is received simultaneous on more than one cover point. Cross coverage is specified using the cross construct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; program main;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:1] y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:1] y_values[$]= '{1,3};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:1] z;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:1] z_values[$]= '{1,2};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; covergroup cg;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover_point_y : coverpoint y ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover_point_z : coverpoint z ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross_yz : cross cover_point_y,cover_point_z ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endgroup&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cg cg_inst = new();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; initial&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(y_values[i])&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y = y_values[i];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; z = z_values[i];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cg_inst.sample();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endprogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3)&amp;nbsp; Why always block is not allowed in program block?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The program block does not allow always block. Only initial and methods are allowed, which are more controllable. &lt;br /&gt;
&lt;br /&gt;
4) What is final block ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SystemVerilog final blocks execute in an arbitrary but deterministic sequential order. This is possible because final blocks are limited to the legal set of statements allowed for functions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXAMPLE :&lt;br /&gt;
&amp;nbsp;&amp;nbsp; module fini;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initial&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #100 $finish;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" END OF SIMULATION at %d ",$time);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; endmodule&lt;br /&gt;
RESULTS:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-1432947986593729420?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RfEtW6RA_6D68Tv75vCX4m86qQ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfEtW6RA_6D68Tv75vCX4m86qQ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RfEtW6RA_6D68Tv75vCX4m86qQ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfEtW6RA_6D68Tv75vCX4m86qQ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/SxMKGsZkAWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/1432947986593729420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-question-9.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1432947986593729420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1432947986593729420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/SxMKGsZkAWk/systemverilog-interview-question-9.html" title="SystemVerilog Interview Question 9" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-question-9.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkINR3g7eyp7ImA9WxFSGUw.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-648625756040560359</id><published>2010-04-21T21:19:00.000-07:00</published><updated>2010-04-21T21:29:56.603-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T21:29:56.603-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Interview Questions 7</title><content type="html">1)&amp;nbsp; Difference between Associative array and Dynamic array ?&lt;br /&gt;
&lt;br /&gt;
Answer:&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dynamic arrays are useful for dealing with contiguous collections of variables whose number changes dynamically.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int array[];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #222222;"&gt;When the size of the collection is unknown or the  data space is sparse, an associative array is a better option. In associative array, it uses the transaction names as the keys in associative array.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp;&amp;nbsp; e.g.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int array[string];&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;2)&amp;nbsp; What are the advantages of SystemVerilog DPI?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;SystemVerilog introduces a new foreign language interface called the Direct Programming Interface (DPI). The DPI provides a very simple, straightforward, and efficient way to connect SystemVerilog and foreign language code unlike PLI or VPI.&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;3)&amp;nbsp; What is bin?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;A coverage-point bin associates a name and a count with a set of values or a sequence of value transitions. If the bin designates a set of values, the count is incremented every time the coverage point matches one of the values in the set. If the bin designates a sequence of value transitions, the count is incremented every time the coverage point matches the entire sequence of value transitions.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #222222;"&gt;e.g. &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;program main;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:2] y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bit [0:2] values[$]= '{3,5,6};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; covergroup cg;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover_point_y : coverpoint y&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { option.auto_bin_max = 4 ; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endgroup&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cg cg_inst = new();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; initial&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(values[i])&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y = values[i];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cg_inst.sample();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; endprogram&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;4) What are void functions ?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;The function does not have return value&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;5)&amp;nbsp;&amp;nbsp; What is coverage driven verification?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;Coverage Driven Verification is a result oriented approach to functional verification. The manager and verification terms define&amp;nbsp; functional coverage points, and then work on the detail of process. &lt;br /&gt;
Used effectively coverage driven verification focuses the Verification team on measurable progress toward an agreed and comprehensive goal.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;6)&amp;nbsp; Explain about pass by ref and pass by value?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;b&gt;Pass by value&lt;/b&gt; is the default method through which arguments are passed into functions and tasks. Each subroutine retains a local copy of the argument. If the arguments are changed within the subroutine declaration, the changes do not affect the caller.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;In pass by reference functions and tasks directly access the specified variables passed as arguments.Its like passing pointer of the variable.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;example:&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;task pass(int i)&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; task pass(var int i) pass by reference &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;{&lt;br /&gt;
delay(10);&lt;br /&gt;
i = 1;&lt;br /&gt;
printf(" i is changed to %d at %d\n",i,get_time(LO) );&lt;br /&gt;
delay(10);&lt;br /&gt;
i = 2;&lt;br /&gt;
printf(" i is changed to %d at %d\n",i,get_time(LO) );&lt;br /&gt;
}&lt;/span&gt;&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;7)&amp;nbsp; What is the difference between program block and module ?&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;The module is the basic building block in Verilog which works well for Design. However, for the testbench, a lot of effort is spent getting the environment properly initialized and synchronized, avoiding races between the design and the testbench, automating the generation of input stimuli, and reusing existing models and other infrastructure.&lt;br /&gt;
&lt;br /&gt;
Systemverilog adds a new type of block called program block. Systemverilog adds a new type of block called program block. The program construct serves as a clear separator between design and testbench, and, more importantly, it specifies specialized execution semantics in the Reactive region for all elements declared within the program. Together with clocking blocks, the program construct provides for race-free interaction between the design and the testbench, and enables cycle and transaction level abstractions.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.testbench.in/program.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.testbench.in/program.PNG" width="307" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;8)&amp;nbsp;&amp;nbsp; Describe the difference between Code Coverage and Functional Coverage Which is more important and Why we need them.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Code Coverage indicates the how much of RTL has been exercised. The Functional Coverage indicates which features or functions has been executed. Both of them are very important.&amp;nbsp; With only Code Coverage, it may not present the real features coverage. On the other hand, the functional coverage may miss some unused RTL coverage.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #222222;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-648625756040560359?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9hRo08iy5Klh60WYTmBbpC36HXQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9hRo08iy5Klh60WYTmBbpC36HXQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9hRo08iy5Klh60WYTmBbpC36HXQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9hRo08iy5Klh60WYTmBbpC36HXQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/t3Qk3Fk510M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/648625756040560359/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-7.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/648625756040560359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/648625756040560359?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/t3Qk3Fk510M/systemverilog-interview-questions-7.html" title="SystemVerilog Interview Questions 7" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8NRXszeSp7ImA9WxFSGEQ.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-3267335120864508932</id><published>2010-04-21T17:41:00.000-07:00</published><updated>2010-04-21T17:41:34.581-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T17:41:34.581-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Interview Questions 6</title><content type="html">1)&amp;nbsp; What is the difference between $random and $urandom?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Answer:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; The functionality of the seed arguments are different for $random and $urandom. The seed argument to $random is an inout. It updates its seed argument after each call to $random. This means the internal random number generator (RNG) state variable is a 32-bit number.&lt;br /&gt;
&lt;br /&gt;
The seed argument to $urandom is an input. This seed is used to set the internal RNG to a value that is over 32-bits (typically 96-bits or greater).&lt;br /&gt;
&lt;br /&gt;
In SystemVerilog, each thread has its own RNG, so only use the the seed argument on the first call to $urandom in each thread. There is also a way to set the seed without generated a random value by using the built-in process class and using the srandom() method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class packet;&lt;br /&gt;
rand bit [7:0] header;&lt;br /&gt;
&lt;br /&gt;
function new(int seed);&lt;br /&gt;
this.srandom(seed);&lt;br /&gt;
endfunction&lt;br /&gt;
endclass&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
packet p=new;&lt;br /&gt;
p.new(33);&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) How do we get seed or use single seed in the VMM ?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Method 1: Let it random by itself&lt;br /&gt;
&amp;nbsp;&amp;nbsp; In VMM , &lt;span class="postbody"&gt;VCS usually prints it to log file.&amp;nbsp; Recently it added a system task to get the seed,  something like: $get_initial_random_seed()&lt;/span&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="postbody"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;&amp;nbsp; Use the following command to put seed back to get the same result "+nbt_random_seed=&lt;seed&gt;".&lt;/seed&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;&amp;nbsp; Method: Fix the seed. &lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;&amp;nbsp; The better approach is to use srandom task/function to fix the seed. We can increase the seed by 1 or use other script to generate the seed. The start seed is only start the regression. It has enough randomize with the test environment.&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
EXAMPLE:&lt;br /&gt;
class Rand_seed;&lt;br /&gt;
&amp;nbsp;rand integer Var;&lt;br /&gt;
&amp;nbsp;function new (int seed);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; srandom(seed);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $display(" SEED is initised to %0d ",seed);&lt;br /&gt;
&amp;nbsp;endfunction&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;function void post_randomize();&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $display(": %0d :",Var);&lt;br /&gt;
&amp;nbsp;endfunction&lt;br /&gt;
endclass&lt;br /&gt;
&lt;br /&gt;
program Rand_seed_p_80;&lt;br /&gt;
&amp;nbsp; Rand_seed rs;&lt;br /&gt;
&amp;nbsp; initial&lt;br /&gt;
&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rs = new(20);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat(5)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void'(rs.randomize());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rs = new(1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat(5)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void'(rs.randomize());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rs = new(20);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat(5)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void'(rs.randomize());&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
endprogram&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-3267335120864508932?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wNDqs0uGyxgyO6pP4Fdffs1m4AM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wNDqs0uGyxgyO6pP4Fdffs1m4AM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wNDqs0uGyxgyO6pP4Fdffs1m4AM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wNDqs0uGyxgyO6pP4Fdffs1m4AM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/Y-L5vCQxjpU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/3267335120864508932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-6.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3267335120864508932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3267335120864508932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/Y-L5vCQxjpU/systemverilog-interview-questions-6.html" title="SystemVerilog Interview Questions 6" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUFQXY9eSp7ImA9WxFSGEQ.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-4686436021833472039</id><published>2010-04-21T16:23:00.000-07:00</published><updated>2010-04-21T16:23:30.861-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T16:23:30.861-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog Interview Question 5</title><content type="html">1) What is the use of modports ?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;b&gt;Modport&lt;/b&gt; restrict interface access within a module based on the direction declared. Directions of signals are specified as seen from the module.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
interface intf (input clk);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logic read, enable,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logic [7:0] addr,data;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modport dut (input read,enable,addr,output data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modport tb (output read,enable,addr,input data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endinterface :intf&lt;br /&gt;
&lt;br /&gt;
2) How parallel case and full cases problems are avoided in SV?&lt;br /&gt;
&lt;br /&gt;
The full_case and parallel_case directives are dangerous because they tell the synthesis tool&lt;br /&gt;
something different about the design than what is told to the simulator.&lt;br /&gt;
&lt;br /&gt;
To the Verilog simulator, full_case and parallel_case are buried inside of Verilog&lt;br /&gt;
comments and are completely ignored. To the synthesis tool, full_case and parallel_case&lt;br /&gt;
are command-directives that instruct the synthesis tools to potentially take certain actions or&lt;br /&gt;
perform certain optimizations that are unknown to the simulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A full case statement is a case statement in which all possible case-expression binary patterns&lt;br /&gt;
can be matched to a case item or to a case default.&lt;br /&gt;
&lt;br /&gt;
e.g. Full case, sel=2'b11 will be covered by default statement.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The x-assignment will also be treated as a don'tcare for synthesis, which may allow the synthesis tool to further optimize the synthesized design. It's the potentially causing a mismatch to occur between simulation and synthesis. To insure that the pre-synthesis and post-synthesis simulations match, the case default could assign the y-output to either a&lt;br /&gt;
predetermined constant value, or to one of the other multiplexer input values&lt;br /&gt;
&lt;br /&gt;
module mux3c&lt;br /&gt;
(output reg y,&lt;br /&gt;
input [1:0] sel,&lt;br /&gt;
input a, b, c);&lt;br /&gt;
always @*&lt;br /&gt;
case (sel)&lt;br /&gt;
2'b00: y = a;&lt;br /&gt;
2'b01: y = b;&lt;br /&gt;
2'b10: y = c;&lt;br /&gt;
default: y = 1'bx;&lt;br /&gt;
endcase&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Use synopsys full_case statement to create the full case , but it treated differently in simulation and synthesis.&lt;br /&gt;
module mux3b (y, a, b, c, sel);&lt;br /&gt;
(output reg y,&lt;br /&gt;
input [1:0] sel,&lt;br /&gt;
input a, b, c);&lt;br /&gt;
always @*&lt;br /&gt;
case (sel) // synopsys full_case&lt;br /&gt;
2'b00: y = a;&lt;br /&gt;
2'b01: y = b;&lt;br /&gt;
2'b10: y = c;&lt;br /&gt;
endcase&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
SystemVerilog use priority modified case statement to solve the full case problem. &lt;br /&gt;
The biggest difference between a full_case directive and a priority modified case statement&lt;br /&gt;
is that the priority keyword is part of the SystemVerilog syntax that will be interpreted the&lt;br /&gt;
same by simulators, synthesis tools and formal verification tools. In essence, the priority case&lt;br /&gt;
statement is a "safe" full_case case statement.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
priority case (...)&lt;br /&gt;
...&lt;br /&gt;
endcase&lt;br /&gt;
&lt;br /&gt;
A parallel case statement is a case statement in which it is only possible to match any case&lt;br /&gt;
expression to one and only one case item. &lt;br /&gt;
&lt;br /&gt;
e.g. A parallel case statement&lt;br /&gt;
&lt;br /&gt;
module intctl1b&lt;br /&gt;
(output reg int2, int1, int0,&lt;br /&gt;
input [2:0] irq );&lt;br /&gt;
always @* begin&lt;br /&gt;
{int2, int1, int0} = 3'b0;&lt;br /&gt;
casez (irq) // synopsys parallel_case&lt;br /&gt;
3'b1??: int2 = 1'b1;&lt;br /&gt;
3'b?1?: int1 = 1'b1;&lt;br /&gt;
3'b??1: int0 = 1'b1;&lt;br /&gt;
endcase&lt;br /&gt;
end&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
This is an example that demonstrates that adding the parallel_case directive makes the design&lt;br /&gt;
smaller and faster, but in the process it also adversely changes the functionality of the design.&lt;br /&gt;
&lt;br /&gt;
SystemVerilog adds the new case statement modifier called "unique."&lt;br /&gt;
The unique keyword shall cause the simulator to report a run-time error if a case expression is&lt;br /&gt;
ever found to match more than one of the case items. In essence, the unique&lt;br /&gt;
case statement is a "safe" parallel_case case statement.&lt;br /&gt;
&lt;br /&gt;
unique case (...)&lt;br /&gt;
...&lt;br /&gt;
default: ...&lt;br /&gt;
endcase&lt;br /&gt;
&lt;br /&gt;
Guideline: Code all intentional priority encoders using if-else-if statements. It is easier for&lt;br /&gt;
the typical design engineer to recognize a priority encoder when it is coded as an if-else-if&lt;br /&gt;
statement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-4686436021833472039?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5qJFiK5krYhIB-n4Q6STK1l_x-s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5qJFiK5krYhIB-n4Q6STK1l_x-s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5qJFiK5krYhIB-n4Q6STK1l_x-s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5qJFiK5krYhIB-n4Q6STK1l_x-s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/S_Xbrq7Ii3M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/4686436021833472039/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-question-5.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4686436021833472039?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4686436021833472039?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/S_Xbrq7Ii3M/systemverilog-interview-question-5.html" title="SystemVerilog Interview Question 5" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-question-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YHRX4ycSp7ImA9WxFSGEU.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-5186538325159279056</id><published>2010-04-21T15:32:00.000-07:00</published><updated>2010-04-21T15:32:14.099-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T15:32:14.099-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>SystemVerilog interview Questions 4</title><content type="html">1) How to call the task which is defined in parent object into derived class ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
The super keyword is used from within a derived class to refer to members of the parent class. It is necessary to use super to access members of a parent class when those members are overridden by the derived class.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class parent;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; task printf();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" THIS IS PARENT CLASS ");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endtask&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endclass&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class subclass extends parent;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; task printf();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.printf();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endtask&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endclass&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; program main;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initial&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subclass s;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = new();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.printf();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endprogram&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;THIS IS PARENT CLASS &lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp; What is the difference between rand and randc?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;b&gt;rand&lt;/b&gt;&amp;nbsp; are standard random variables. When there are no other control on distrubution, these variables are uniformly distributed across valid values.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;b&gt;randc&lt;/b&gt; are random cyclic that randomly iterates over all the values in the range and no value is repeated with in an iteration until every possible value has been assigned.&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
3) What is solve...before constraint ?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
constraint order { solve a before b ;}&lt;br /&gt;
This guides the solver to give highest priority to a than b while picking the solution from solution space.&lt;br /&gt;
&lt;br /&gt;
Answer: &lt;br /&gt;
4) What is the difference between fork/joins, fork/join_none fork/join_any ?&lt;br /&gt;
&lt;br /&gt;
Fork Join None: The parent process continues to execute concurrently with all the processes spawned by the fork. The spawned processes do not start executing until the parent thread executes a blocking statement.&lt;br /&gt;
&lt;br /&gt;
Fork Join Any:&amp;nbsp; The parent process blocks until any one of the processes spawned by this fork completes.&lt;br /&gt;
&lt;br /&gt;
For Join All:&amp;nbsp;&amp;nbsp; The parent process blocks until all the processes spawned by this fork complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-5186538325159279056?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NoYSlcbWmXW3QF3T15Zaun64ERI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NoYSlcbWmXW3QF3T15Zaun64ERI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NoYSlcbWmXW3QF3T15Zaun64ERI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NoYSlcbWmXW3QF3T15Zaun64ERI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/cOPj7vTao8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/5186538325159279056/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-4.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5186538325159279056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/5186538325159279056?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/cOPj7vTao8Q/systemverilog-interview-questions-4.html" title="SystemVerilog interview Questions 4" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBSHw8cCp7ImA9WxFSGEU.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-1570802572378351103</id><published>2010-04-21T15:16:00.000-07:00</published><updated>2010-04-21T15:32:39.278-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T15:32:39.278-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC SystemVerilog" /><title>Systemverilog Interview Questions 3</title><content type="html">1) What is the difference between mailbox and queue?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
A &lt;b&gt;queue&lt;/b&gt; is a variable-size, ordered collection of homogeneous elements. A Queue is analogous to one dimensional unpacked array that grows and shrinks automatically. Queues can be used to model a last in, first out buffer or first in, first out buffer.&lt;br /&gt;
&lt;br /&gt;
// Other data type as reference&lt;br /&gt;
// int q[];  dynamic array&lt;br /&gt;
// int q[5]; fixed array&lt;br /&gt;
// int q[string]; associate array  &lt;br /&gt;
//  include &amp;lt;&lt;list.vh&gt;&lt;br /&gt;
//    List#(integer) List1;&amp;nbsp;&amp;nbsp;&amp;nbsp;  //&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
int q[$] = { 2, 4, 8 };&lt;br /&gt;
int p[$];&lt;br /&gt;
int e, pos;&lt;br /&gt;
e = q[0];              //  read the first (leftmost) item&lt;br /&gt;
e = q[$];              //  read the last (rightmost) item&lt;br /&gt;
q[0] = e;              //  write the first item&lt;br /&gt;
p = q;                 //  read and write entire queue (copy)&lt;/list.vh&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;list.vh&gt;A &lt;b&gt;mailbox&lt;/b&gt; is a communication mechanism that allows messages to be exchanged between processes. Data can be sent to a mailbox by one process and retrieved by another.&amp;nbsp;&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;2) What data structure you used to build scoreboard?&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;Answer:&lt;/list.vh&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;list.vh&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In SV, we use mailbox to get data from different modules and compare the result.&lt;/list.vh&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;list.vh&gt;class Scoreboard;&lt;br /&gt;
&lt;br /&gt;
mailbox drvr2sb;&lt;br /&gt;
mailbox rcvr2sb;&lt;br /&gt;
&lt;br /&gt;
function new(mailbox drvr2sb,mailbox rcvr2sb);&lt;br /&gt;
&amp;nbsp; this.drvr2sb = drvr2sb;&lt;br /&gt;
&amp;nbsp; this.rcvr2sb = rcvr2sb;&lt;br /&gt;
endfunction:new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
task start();&lt;br /&gt;
&amp;nbsp; packet pkt_rcv,pkt_exp;&lt;br /&gt;
&amp;nbsp; forever&lt;br /&gt;
&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rcvr2sb.get(pkt_rcv);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" %0d : Scorebooard : Scoreboard received a packet from receiver ",$time);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; drvr2sb.get(pkt_exp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pkt_rcv.compare(pkt_exp)) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" %0d : Scoreboardd :Packet Matched ",$time);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $root.error++;&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
endtask : start&lt;br /&gt;
&lt;br /&gt;
endclass&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
In VMM, we use channels to connect all the modules and  compare the result.&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;class Scoreboard extends vmm_xactor;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Packet_channel&amp;nbsp;&amp;nbsp; drvr2sb_chan;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Packet_channel&amp;nbsp;&amp;nbsp; rcvr2sb_chan;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function new(string inst = "class",&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int unsigned stream_id = -1,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Packet_channel&amp;nbsp;&amp;nbsp; drvr2sb_chan = null,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Packet_channel&amp;nbsp;&amp;nbsp; rcvr2sb_chan = null);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.new("sb",inst,stream_id);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(drvr2sb_chan == null)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `vmm_fatal(this.log,"drvr2sb_channel is not constructed");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.drvr2sb_chan = drvr2sb_chan;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(rcvr2sb_chan == null)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `vmm_fatal(this.log,"rcvr2sb_channel is not constructed");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.rcvr2sb_chan = rcvr2sb_chan;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `vmm_note(log,"Scoreboard created ");&lt;br /&gt;
&lt;br /&gt;
endfunction:new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
task main();&lt;br /&gt;
&amp;nbsp; Packet pkt_rcv,pkt_exp;&lt;br /&gt;
&amp;nbsp; string msg;&lt;br /&gt;
&amp;nbsp; super.main(); &lt;br /&gt;
&amp;nbsp; forever&lt;br /&gt;
&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rcvr2sb_chan.get(pkt_rcv);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" %0d : Scoreboard : Scoreboard received a packet from receiver ",$time);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; drvr2sb_chan.get(pkt_exp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pkt_rcv.compare(pkt_exp,msg)) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $display(" %0d : Scoreboard :Packet Matched ",$time);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; `vmm_error(this.log,$psprintf(" Packet MissMatched \n %s ",msg));&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
endtask : main&lt;br /&gt;
&lt;br /&gt;
endclass&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;3) What are the advantages of linkedlist over the queue ?&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&amp;nbsp;Answer:&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&amp;nbsp;Queue has a certain order. It's hard to insert the data within the queue. But Linkedlist can easily insert the data in any location.&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;4) What is the use of $cast?&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;Using Casting one can assign values to variables that might not ordinarily be valid because of differing data type. SystemVerilog adds 2 types of casting. Static casting and dynamic casting.&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;e.g.&amp;nbsp; i = int '(10.0-0.1); // static cast convert real to integer&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;// Dynamic casting&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;function int $cast( singular dest_var, singular source_exp );&lt;br /&gt;
or&lt;br /&gt;
task $cast( singular dest_var, singular source_exp );&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;&lt;br /&gt;
&lt;/list.vh&gt;&lt;br /&gt;
&lt;list.vh&gt;e.g. $cast( col, 2 + 3 );&lt;/list.vh&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-1570802572378351103?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0EMo1bwnF0TZB9d07xsYUC0pehg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0EMo1bwnF0TZB9d07xsYUC0pehg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0EMo1bwnF0TZB9d07xsYUC0pehg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0EMo1bwnF0TZB9d07xsYUC0pehg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/AANpqRKhnQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/1570802572378351103/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1570802572378351103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1570802572378351103?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/AANpqRKhnQg/systemverilog-interview-questions.html" title="Systemverilog Interview Questions 3" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/systemverilog-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUER3g5eyp7ImA9WxFSGEU.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8148703959284276481</id><published>2010-04-21T09:40:00.000-07:00</published><updated>2010-04-21T14:10:06.623-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T14:10:06.623-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASIC Verification" /><title>ASIC Verification Interview Questions</title><content type="html">&lt;span class="postbody"&gt;1)&amp;nbsp; What if design engineer and verification engineer do the same mistake  in Test bench BFM(Bus Functional Model)  and RTL(DUT)? How can you able to detect errors?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;Answer:&amp;nbsp; 1. &amp;nbsp; &lt;/span&gt;&lt;span class="postbody"&gt;Code reviews &amp;amp; protocol checkers&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2. &amp;nbsp;&lt;/span&gt;&lt;span class="postbody"&gt; IP gets verified in multiple environments ..  like block level test bench, out of box testbench (connecting DUT back  to back) &lt;/span&gt;&lt;span class="postbody"&gt;, full fledged testbench using proven BFM, SoC  level testbench using processor and all that etc...  this all  environments SHOULD be executed by diferent persons and so you should be  able to catch that bug in one of this testbench ...  &lt;/span&gt;&lt;span class="postbody"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3. customer will catch the problem ( worst case )&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt; 2)&amp;nbsp; If you got a failure from the customer, how do you debug this? How do you prevent it to happen again?&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;Answer: 1. First, try to reproduce the problem in your own environment. Try to get customer's vector, so you can inject the same vector to create the problem in house.&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. If you confirm the problem and fix them, you should put the new assertion or test to catch the problem again. Add this new test in the future test plan, so the problem will not happen again.&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="postbody"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8148703959284276481?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IekGG7905_ZwcLY-2sR5QWJKRkY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IekGG7905_ZwcLY-2sR5QWJKRkY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IekGG7905_ZwcLY-2sR5QWJKRkY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IekGG7905_ZwcLY-2sR5QWJKRkY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/bqAQOMN9ems" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8148703959284276481/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/04/asic-verification-interview-questions.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8148703959284276481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8148703959284276481?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/bqAQOMN9ems/asic-verification-interview-questions.html" title="ASIC Verification Interview Questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/04/asic-verification-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHR3o8eip7ImA9WxBVFEQ.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-1582409598702220086</id><published>2010-02-17T17:13:00.000-08:00</published><updated>2010-02-18T04:45:36.472-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-18T04:45:36.472-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Previous Interview Questions" /><title>Previous Interview  Questions</title><content type="html">1) Try to model Stack in Verilog code?&lt;br /&gt;
&lt;br /&gt;
module Stack (DataIO, Reset, Push, Pop, SP, Full, Empty, Err);&lt;br /&gt;
//Verilog code for stack&lt;br /&gt;
&lt;br /&gt;
/* declare input, output and inout ports */&lt;br /&gt;
inout [3:0] DataIO;&lt;br /&gt;
input Push,Pop,Reset;&lt;br /&gt;
output Empty,Err;&lt;br /&gt;
Full,output [2:0] &lt;span style="color: red;"&gt;SP&lt;/span&gt;; // Stack pointer&lt;br /&gt;
&lt;br /&gt;
// declare registers&lt;br /&gt;
regEmpty,Err;&lt;br /&gt;
Full,reg [2:0] SP;&lt;br /&gt;
reg [3:0] Stack[7:0];&lt;br /&gt;
reg [3:0] DataR;&lt;br /&gt;
&lt;br /&gt;
/* continuous assignment of DataIO to DataR register, with delay 0 */&lt;br /&gt;
wire [3:0] #(0) DataIO = DataR;&lt;br /&gt;
&lt;br /&gt;
// put DataR in high impedance, so the stack can get data &lt;br /&gt;
&lt;br /&gt;
always @ (negedge Pop)&lt;br /&gt;
begin&lt;br /&gt;
DataR = 4'bzzzz;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
always @ (posedge Push or posedge Pop or posedge Reset)&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; if (Reset==1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataR = 4'bzzzz;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SP = 3'b0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Full = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Empty = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Err = 0;&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Push==1) begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //when the stack is empty&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Empty==1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack[SP] = DataIO;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Empty = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Err==1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Err=0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else // when the stack is full&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(full==1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack[SP] = DataIO;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Err = 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SP = SP +1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack [SP] = DataIO;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SP == 3'b111)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Full = 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
end&amp;nbsp; // end of push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Pop==1) begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* if SP indicates the last location but the stack is not empty */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((SP == 3'b000) &amp;amp;&amp;amp; (Empty!=1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataR = Stack[SP];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Empty = 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else // if the stack is emtpy&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Empty==1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataR = Stack[SP];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Err = 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataR = Stack[SP];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SP != 3'b000)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SP = SP-1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if the stack is full&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Err==1) Err = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Full==1) Full = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;end&amp;nbsp; // end of pop&lt;br /&gt;
end&amp;nbsp; // end of always loop&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
2) what is difference between CAM and TCAM?&lt;br /&gt;
&lt;br /&gt;
First, CAM stands for Content Addressable Memory. A CAM is a special type of memory; some would say the opposite of RAM. With normal computer memory (RAM) the operating system provides an address, and receives the data stored at the supplied address. With a CAM, the operating system supplies the data, and the CAM returns a list of addresses where the data is stored, if it finds any. Furthermore, a CAM searches the entire memory in one operation, so it is considerably faster than RAM.&lt;br /&gt;
&lt;br /&gt;
The most commonly implemented CAMs are called binary CAMs. They search only for ones and zeros; a simple operation. MAC address tables in switches commonly get stored inside binary CAMs. With CAMs, the operating system can find what it needs in a single operation. In this case it's the switchport that data should be sent out, based on the given MAC address,&lt;br /&gt;
&lt;br /&gt;
The TCAM is a Ternary CAM. This allows the operating system to match a third state, "X." The X state is a "mask," meaning its value can be anything. This lends itself well to networking, since netmasks (define) operate this way. To calculate a subnet address we mask the bits we don't care about, and then apply the logical AND operation to the rest. Routers can store their entire routing table in these TCAMs, allowing for very quick lookups.&lt;br /&gt;
&lt;br /&gt;
3) One-hot state machine vs highly encoded state machine&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One-hot state machine: better performance, easy encode&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; highly encode state machine has less bit for state parameters&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;b&gt;Using Single Always For Sequential, Combo And Output Logic&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;b&gt;&lt;span id="g"&gt;//====================================================&lt;/span&gt;&lt;span id="lo"&gt;  2&lt;/span&gt; &lt;span id="g"&gt;// This is FSM demo program using single always&lt;/span&gt;&lt;span id="lo"&gt;  3&lt;/span&gt; &lt;span id="g"&gt;// for both seq and combo logic&lt;/span&gt;&lt;span id="lo"&gt;  4&lt;/span&gt; &lt;span id="g"&gt;// Design Name : fsm_using_single_always&lt;/span&gt;&lt;span id="lo"&gt;  5&lt;/span&gt; &lt;span id="g"&gt;// File Name   : fsm_using_single_always.v&lt;/span&gt;&lt;span id="lo"&gt;  6&lt;/span&gt; &lt;span id="g"&gt;//=====================================================&lt;/span&gt;&lt;span id="lo"&gt;  7&lt;/span&gt; &lt;span id="b"&gt;module&lt;/span&gt; fsm_using_single_always (&lt;br /&gt;
&lt;span id="lo"&gt;  8&lt;/span&gt; clock      , &lt;span id="g"&gt;// clock&lt;/span&gt;&lt;span id="lo"&gt;  9&lt;/span&gt; reset      , &lt;span id="g"&gt;// Active high, syn reset&lt;/span&gt;&lt;span id="lo"&gt; 10&lt;/span&gt; req_0      , &lt;span id="g"&gt;// Request 0&lt;/span&gt;&lt;span id="lo"&gt; 11&lt;/span&gt; req_1      , &lt;span id="g"&gt;// Request 1&lt;/span&gt;&lt;span id="lo"&gt; 12&lt;/span&gt; gnt_0      , &lt;span id="g"&gt;// Grant 0&lt;/span&gt;&lt;span id="lo"&gt; 13&lt;/span&gt; gnt_1      &lt;br /&gt;
&lt;span id="lo"&gt; 14&lt;/span&gt; );&lt;br /&gt;
&lt;span id="lo"&gt; 15&lt;/span&gt; &lt;span id="g"&gt;//=============Input Ports=============================&lt;/span&gt;&lt;span id="lo"&gt; 16&lt;/span&gt; &lt;span id="b"&gt;input&lt;/span&gt;   clock,reset,req_0,req_1;&lt;br /&gt;
&lt;span id="lo"&gt; 17&lt;/span&gt;  &lt;span id="g"&gt;//=============Output Ports===========================&lt;/span&gt;&lt;span id="lo"&gt; 18&lt;/span&gt; &lt;span id="b"&gt;output&lt;/span&gt;  gnt_0,gnt_1;&lt;br /&gt;
&lt;span id="lo"&gt; 19&lt;/span&gt; &lt;span id="g"&gt;//=============Input ports Data Type===================&lt;/span&gt;&lt;span id="lo"&gt; 20&lt;/span&gt; &lt;span id="b"&gt;wire&lt;/span&gt;    clock,reset,req_0,req_1;&lt;br /&gt;
&lt;span id="lo"&gt; 21&lt;/span&gt; &lt;span id="g"&gt;//=============Output Ports Data Type==================&lt;/span&gt;&lt;span id="lo"&gt; 22&lt;/span&gt; &lt;span id="b"&gt;reg&lt;/span&gt;     gnt_0,gnt_1;&lt;br /&gt;
&lt;span id="lo"&gt; 23&lt;/span&gt; &lt;span id="g"&gt;//=============Internal Constants======================&lt;/span&gt;&lt;span id="lo"&gt; 24&lt;/span&gt; &lt;span id="b"&gt;parameter&lt;/span&gt; SIZE&lt;span id="sc"&gt; = &lt;/span&gt;3           ;&lt;br /&gt;
&lt;span id="lo"&gt; 25&lt;/span&gt; &lt;span id="b"&gt;parameter&lt;/span&gt; IDLE &lt;span id="sc"&gt; = &lt;/span&gt;3'b001,GNT0&lt;span id="sc"&gt; = &lt;/span&gt;3'b010,GNT1&lt;span id="sc"&gt; = &lt;/span&gt;3'b100 ;&lt;br /&gt;
&lt;span id="lo"&gt; 26&lt;/span&gt; &lt;span id="g"&gt;//=============Internal Variables======================&lt;/span&gt;&lt;span id="lo"&gt; 27&lt;/span&gt; &lt;span id="b"&gt;reg&lt;/span&gt;   [SIZE-1:0]          state        ;&lt;span id="g"&gt;// Seq part of the FSM&lt;/span&gt;&lt;span id="lo"&gt; 28&lt;/span&gt; &lt;span id="b"&gt;reg&lt;/span&gt;   [SIZE-1:0]          next_state   ;&lt;span id="g"&gt;// combo part of FSM&lt;/span&gt;&lt;span id="lo"&gt; 29&lt;/span&gt; &lt;span id="g"&gt;//==========Code startes Here==========================&lt;/span&gt;&lt;span id="lo"&gt; 30&lt;/span&gt; &lt;span id="b"&gt;always&lt;/span&gt; &lt;span id="sc"&gt;@&lt;/span&gt; (&lt;span id="b"&gt;posedge&lt;/span&gt; clock)&lt;br /&gt;
&lt;span id="lo"&gt; 31&lt;/span&gt; &lt;span id="b"&gt;begin&lt;/span&gt;&lt;span id="sc"&gt; : &lt;/span&gt;FSM&lt;br /&gt;
&lt;span id="lo"&gt; 32&lt;/span&gt; &lt;span id="b"&gt;if&lt;/span&gt; (reset &lt;span id="sc"&gt;==&lt;/span&gt; 1'b1) &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 33&lt;/span&gt;   state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; IDLE;&lt;br /&gt;
&lt;span id="lo"&gt; 34&lt;/span&gt;   gnt_0 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 0;&lt;br /&gt;
&lt;span id="lo"&gt; 35&lt;/span&gt;   gnt_1 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 0;&lt;br /&gt;
&lt;span id="lo"&gt; 36&lt;/span&gt; &lt;span id="b"&gt;end&lt;/span&gt; &lt;span id="b"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 37&lt;/span&gt;  &lt;span id="b"&gt;case&lt;/span&gt;(state)&lt;br /&gt;
&lt;span id="lo"&gt; 38&lt;/span&gt;    IDLE&lt;span id="sc"&gt; : &lt;/span&gt;&lt;span id="b"&gt;if&lt;/span&gt; (req_0 &lt;span id="sc"&gt;==&lt;/span&gt; 1'b1) &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 39&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; GNT0;&lt;br /&gt;
&lt;span id="lo"&gt; 40&lt;/span&gt;                 gnt_0 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 1;&lt;br /&gt;
&lt;span id="lo"&gt; 41&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt; &lt;span id="b"&gt;else&lt;/span&gt; &lt;span id="b"&gt;if&lt;/span&gt; (req_1 &lt;span id="sc"&gt;==&lt;/span&gt; 1'b1) &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 42&lt;/span&gt;                 gnt_1 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 1;&lt;br /&gt;
&lt;span id="lo"&gt; 43&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; GNT1;&lt;br /&gt;
&lt;span id="lo"&gt; 44&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt; &lt;span id="b"&gt;else&lt;/span&gt; &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 45&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; IDLE;&lt;br /&gt;
&lt;span id="lo"&gt; 46&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 47&lt;/span&gt;    GNT0&lt;span id="sc"&gt; : &lt;/span&gt;&lt;span id="b"&gt;if&lt;/span&gt; (req_0 &lt;span id="sc"&gt;==&lt;/span&gt; 1'b1) &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 48&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; GNT0;&lt;br /&gt;
&lt;span id="lo"&gt; 49&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt; &lt;span id="b"&gt;else&lt;/span&gt; &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 50&lt;/span&gt;                 gnt_0 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 0;&lt;br /&gt;
&lt;span id="lo"&gt; 51&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; IDLE;&lt;br /&gt;
&lt;span id="lo"&gt; 52&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 53&lt;/span&gt;    GNT1&lt;span id="sc"&gt; : &lt;/span&gt;&lt;span id="b"&gt;if&lt;/span&gt; (req_1 &lt;span id="sc"&gt;==&lt;/span&gt; 1'b1) &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 54&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; GNT1;&lt;br /&gt;
&lt;span id="lo"&gt; 55&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt; &lt;span id="b"&gt;else&lt;/span&gt; &lt;span id="b"&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 56&lt;/span&gt;                 gnt_1 &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt; 0;&lt;br /&gt;
&lt;span id="lo"&gt; 57&lt;/span&gt;                 state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; IDLE;&lt;br /&gt;
&lt;span id="lo"&gt; 58&lt;/span&gt;               &lt;span id="b"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 59&lt;/span&gt;    &lt;span id="b"&gt;default&lt;/span&gt;&lt;span id="sc"&gt; : &lt;/span&gt;state &lt;span id="sc"&gt;&amp;lt;=&lt;/span&gt;&lt;span id="oc"&gt;  #1 &lt;/span&gt; IDLE;&lt;br /&gt;
&lt;span id="lo"&gt; 60&lt;/span&gt; &lt;span id="b"&gt;endcase&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 61&lt;/span&gt; &lt;span id="b"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span id="lo"&gt; 62&lt;/span&gt; &lt;br /&gt;
&lt;span id="lo"&gt; 63&lt;/span&gt; &lt;span id="b"&gt;endmodule&lt;/span&gt; &lt;span id="g"&gt;// End of Module arbiter&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
4) Write a perl script to read a file and then count the "ERROR=number" ? Check the number did increase.&lt;br /&gt;
&lt;br /&gt;
Answer: &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; First, you can use grep -f patternfile source &amp;gt; target to generate a new log file with ERROR=# format or directly use perl to do it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Assume the log file has the format&amp;nbsp; "ERROR=number" format in some lines,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #!/usr/bin/perl&lt;br /&gt;
&amp;nbsp;&amp;nbsp; system(grep "ERROR" logfile &amp;gt; error_logfile);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; open(IN, "error_logfile") or die "Cannot open the error_logfile!";&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while($line=&lt;in&gt;&lt;in&gt;) {&lt;/in&gt;&lt;/in&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; chop($line);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; @err_array = split(/\d/,$line);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $w=1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ($$w&amp;lt;= @err_array) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($err_array[$w-1] &amp;lt; $err_array[$w])&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $err_incr_cnt +=1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $err_decr_cnt +=1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; $w++;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp;&amp;nbsp; print "Total number of error = $w";&lt;br /&gt;
&amp;nbsp;&amp;nbsp; print "Error Increment  counter = $err_incr_cnt";&lt;br /&gt;
&amp;nbsp;&amp;nbsp; print "Error Decrement counter  =$err_decr_cnt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-1582409598702220086?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Azwq0QsO8IENTmvYHviPvJlxHNg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Azwq0QsO8IENTmvYHviPvJlxHNg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Azwq0QsO8IENTmvYHviPvJlxHNg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Azwq0QsO8IENTmvYHviPvJlxHNg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/eQ2_K9Pvr5s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/1582409598702220086/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/previous-interview-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1582409598702220086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1582409598702220086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/eQ2_K9Pvr5s/previous-interview-questions.html" title="Previous Interview  Questions" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/previous-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFRnc6fip7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8924711878291725611</id><published>2010-02-17T12:19:00.000-08:00</published><updated>2010-02-17T12:20:17.916-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T12:20:17.916-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl Hash examples</title><content type="html">Example:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #! C:\programfiles\perl\bin\perl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "content-type: text/html\n\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; %name = ('Tom',26,'Peter',51,'Jones', 23, 'John', 43);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Sorted by Keys \n &lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $key (sort keys %name) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$key: $name{$key}&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Sorted by Values \n&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $value (sort {$name{$a} cmp $name{$b} }keys %name)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$value: $name{$value}&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
Sorted by Keys&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; John: 43&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jones: 23&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Peter: 51&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tom: 26&lt;br /&gt;
Sorted by Values&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jones: 23&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tom: 26&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; John: 43&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Peter: 51&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regular expressions are that makes Perl an ideal language for "Practical extraction and reporting" as the name implies.To construct the regular expression, which is essentially a sequence of characters describing the pattern you would like to match.&lt;br /&gt;
&lt;br /&gt;
Metacharacter&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Default Behaviour&lt;br /&gt;
\ &amp;nbsp;&amp;nbsp;&amp;nbsp; Quote next character&lt;br /&gt;
^ &amp;nbsp;&amp;nbsp;&amp;nbsp; Match beginning-of-string&lt;br /&gt;
. &amp;nbsp;&amp;nbsp;&amp;nbsp; Match any character except newline&lt;br /&gt;
$ &amp;nbsp;&amp;nbsp;&amp;nbsp; Match end-of-string&lt;br /&gt;
| &amp;nbsp;&amp;nbsp;&amp;nbsp; Alternation&lt;br /&gt;
() &amp;nbsp;&amp;nbsp;&amp;nbsp; Grouping and save subpattern&lt;br /&gt;
[ ] &amp;nbsp;&amp;nbsp;&amp;nbsp; Character class&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The split() function is used to split up a string using a regular expression delimiter or a character or a string.&lt;br /&gt;
Syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; split (string);&lt;br /&gt;
&lt;br /&gt;
In the above syntax, split() function takes a "string" as the argument.&lt;br /&gt;
Example to split string using regular expression delimiter:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #! C:\programfiles\perl\bin\perl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "content-type: text/html\n\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $str1 = "how,are,you";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $str2 = "how!!are!!you";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $str3 = "how1are2you";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @val1 = split(",", $str1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @val2 = split('!!', $str2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @val3 = split(/\d+/, $str3);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Removed the character Comma","\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $val1 (@val1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$val1\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Removed the string '!!'";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $val2 (@val2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$val2\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Removed the decimals 1,2";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&lt;br /&gt;
";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $val3 (@val3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$val3\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Removed the character Comma&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; how are you&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Removed the string '!!'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; how are you&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Removed the decimals 1,2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; how are you &lt;br /&gt;
&lt;br /&gt;
In the above example the string "howareyou" is seperated first with a comma, then by a string "!!", at last seperated by decimals "1,2", which is removed using a regular expression "/\d+/". All these strings are split and stored in an array, then using a loop its returned one by one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8924711878291725611?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fNnxQ2iCUJat04F-bdwwjm0Mxxg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fNnxQ2iCUJat04F-bdwwjm0Mxxg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fNnxQ2iCUJat04F-bdwwjm0Mxxg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fNnxQ2iCUJat04F-bdwwjm0Mxxg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/szNLVDqKnxA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8924711878291725611/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-hash-examples.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8924711878291725611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8924711878291725611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/szNLVDqKnxA/perl-hash-examples.html" title="Perl Hash examples" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-hash-examples.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGQnY-eip7ImA9WxBVE0U.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-6323292816343268556</id><published>2010-02-16T21:08:00.000-08:00</published><updated>2010-02-16T21:08:43.852-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T21:08:43.852-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>C++ Class example</title><content type="html">Basic Class C++ example code &lt;br /&gt;
&lt;br /&gt;
// example one&lt;br /&gt;
#include &lt;iostream&gt;&lt;br /&gt;
#include &lt;stdio.h&gt;&lt;br /&gt;
&lt;br /&gt;
class Book&lt;br /&gt;
{&lt;br /&gt;
// by default, all data and function are private &lt;/stdio.h&gt;&lt;/iostream&gt;&lt;br /&gt;
int PageCount;&lt;br /&gt;
int CurrentPage;&lt;br /&gt;
public:&lt;br /&gt;
Book( int Numpages) ; // Constructor&lt;br /&gt;
~Book(){} ; // Destructor&lt;br /&gt;
void SetPage( int PageNumber) ;&lt;br /&gt;
int GetCurrentPage( void ) ;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Book::Book( int NumPages) {&lt;br /&gt;
PageCount = NumPages;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void Book::SetPage( int PageNumber) {&lt;br /&gt;
CurrentPage=PageNumber;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Book::GetCurrentPage( void ) {&lt;br /&gt;
return CurrentPage;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
Book ABook(128) ;&amp;nbsp;&amp;nbsp; // Call constructor() and set PageNum=128&lt;br /&gt;
ABook.SetPage( 56 ) ;&amp;nbsp; // Set the current page number&lt;br /&gt;
std::cout &amp;lt;&amp;lt; "Current Page " &amp;lt;&amp;lt; ABook.GetCurrentPage() &amp;lt;&amp;lt; std::endl;&amp;nbsp;&amp;nbsp;&amp;nbsp; // print out the current page&lt;br /&gt;
return 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // call destructor&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This example will demonstrate inheritance. This is a two class&amp;nbsp; application&amp;nbsp; with one class derived from another.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #include &lt;iostream&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #include &lt;stdio.h&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class Point&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; // default private&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int x,y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Point(int atx,int aty ) ; // Constructor&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; inline virtual ~Point() ; // Destructor&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual void Draw() ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/stdio.h&gt;&lt;/iostream&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class Circle : public Point {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int radius;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Circle(int atx,int aty,int theRadius) ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; inline virtual ~Circle() ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual void Draw() ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Point ::Point(int atx,int aty) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; x = atx;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; y = aty;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; inline Point::~Point ( void ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; "Point Destructor called\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; void Point::Draw( void ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; "Point::Draw point at " &amp;lt;&amp;lt; x &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; y &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Circle::Circle(int atx,int aty,int theRadius) : Point(atx,aty) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; radius = theRadius;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; inline Circle::~Circle() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; "Circle Destructor called" &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; void Circle::Draw( void ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Point::Draw() ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; "circle::Draw point " &amp;lt;&amp;lt; " Radius "&amp;lt;&amp;lt; radius &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int main() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Circle ACircle(10,10,5) ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ACircle.Draw() ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
What is Polymorphism?&lt;br /&gt;
&lt;br /&gt;
Polymorphism is a generic term that means 'many shapes'. In C++ the simplest form of Polymorphism is overloading of functions, for instance several functions called SortArray( arraytype ) where sortarray might be an array&amp;nbsp; of ints, or doubles.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
/* A base class of Shape gives rise to&lt;br /&gt;
two derived classes - Circle and Square.&lt;br /&gt;
&lt;br /&gt;
An application called Polygon sets up an&lt;br /&gt;
array of Circles and Squares, and uses a&lt;br /&gt;
getarea method to find the area of each.&lt;br /&gt;
&lt;br /&gt;
This getarea method is defined as a virtual&lt;br /&gt;
method in the base class, so that an array&lt;br /&gt;
of shapes CAN be defined on which two&lt;br /&gt;
different getarea methods can be run&lt;br /&gt;
depending on which type of shape is the&lt;br /&gt;
current one at the time. */&lt;br /&gt;
&lt;br /&gt;
::::::::::::::&lt;br /&gt;
shape.h&lt;br /&gt;
::::::::::::::&lt;br /&gt;
&lt;br /&gt;
#ifndef SHAPE&lt;br /&gt;
#define SHAPE 1&lt;br /&gt;
&lt;br /&gt;
class Shape {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void setsize(int owbig);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual float getarea() {};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int givensize;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
::::::::::::::&lt;br /&gt;
shape.cpp&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include "shape.h"&lt;br /&gt;
&lt;br /&gt;
void Shape::setsize(int sv) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; givensize = sv;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
::::::::::::::&lt;br /&gt;
square.h&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include "shape.h"&lt;br /&gt;
&lt;br /&gt;
class Square: public Shape {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float getarea();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
::::::::::::::&lt;br /&gt;
square.cpp&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include "square.h"&lt;br /&gt;
&lt;br /&gt;
float Square::getarea() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float result = givensize * givensize;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (result);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
::::::::::::::&lt;br /&gt;
circle.h&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include "shape.h"&lt;br /&gt;
&lt;br /&gt;
class Circle: public Shape {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float getarea();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
::::::::::::::&lt;br /&gt;
circle.cpp&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include "circle.h"&lt;br /&gt;
&lt;br /&gt;
float Circle::getarea() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float result = 3.14159265f * givensize;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
::::::::::::::&lt;br /&gt;
polygon.cpp&lt;br /&gt;
::::::::::::::&lt;br /&gt;
#include &lt;iostream.h&gt;&lt;br /&gt;
#include "circle.h"&lt;br /&gt;
#include "square.h"&lt;br /&gt;
&lt;br /&gt;
main () {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int np = 10;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Shape *jigsaw[np];&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int k=0; k&lt;np; k+="2)" {=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jigsaw[k] = new Square();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jigsaw[k+1] = new Circle();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int k=0; k&lt;np; k++)="" {=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jigsaw[k]-&amp;gt;setsize(10+k);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int k=0; k&lt;np; k++)="" {=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float syze = jigsaw[k]-&amp;gt;getarea();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "this is sq " &amp;lt;&amp;lt; syze &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/np;&gt;&lt;/np;&gt;&lt;/np;&gt;&lt;/iostream.h&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-6323292816343268556?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wlELmj5HCnK-maYgSIiRsNowQAo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlELmj5HCnK-maYgSIiRsNowQAo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wlELmj5HCnK-maYgSIiRsNowQAo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlELmj5HCnK-maYgSIiRsNowQAo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/yDuDB4x_u1U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/6323292816343268556/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/c-class-example.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/6323292816343268556?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/6323292816343268556?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/yDuDB4x_u1U/c-class-example.html" title="C++ Class example" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/c-class-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQn8zeSp7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-8109163471184203341</id><published>2010-02-16T14:01:00.000-08:00</published><updated>2010-02-17T11:44:33.181-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T11:44:33.181-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #7</title><content type="html">1) What happens when you return a reference to a private variable?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
Perl Keeps track of your variables, whether dynamic or otherwise, and dones't free things before you're done using them.&lt;br /&gt;
&lt;br /&gt;
2) How do I sort a hash by the hash value?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
# help sort a hash by the hash 'value', not the 'key'&lt;br /&gt;
&lt;br /&gt;
sub sorthashValueDescendingNum {$grades{$b} &amp;lt;=&amp;gt; ${grades{$a}};&lt;br /&gt;
&lt;br /&gt;
%grades =( student1=&amp;gt;90,&lt;br /&gt;
student2=&amp;gt;75,&lt;br /&gt;
student3=&amp;gt;76);&lt;br /&gt;
&lt;br /&gt;
print "\n\tGRADES IN ASCENDING NUMERIC ORDER\n";&lt;br /&gt;
foreach $key (sort(keys(%grades))){&lt;br /&gt;
print "\t\t$grades{$key} \t\t$key\n";&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print "\n\tGRADES IN DESCENDING NUMERIC ORDER\n";&lt;br /&gt;
foreach $key (sorthashValueDescendingNum(keys(%grades))){&lt;br /&gt;
print "\t\t$grades{$key} \t\t$key\n";&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
3) How to read file into hash array?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
The following little snippet of code should do exactly what you want:&lt;br /&gt;
&lt;br /&gt;
open(IN, "&lt;name_file")&gt;filename")&lt;br /&gt;
&lt;/name_file")&gt;&lt;br /&gt;
&lt;name_file")&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   or die "Couldn't open file for processing: $!";&lt;br /&gt;
while (&lt;/name_file")&gt;&lt;in&gt;&lt;name_file")&gt;&lt;in&gt;&lt;in&gt;) {&lt;br /&gt;
chomp;&lt;br /&gt;
$hash_table{$_} = 0;&lt;br /&gt;
}&lt;br /&gt;
close IN;&lt;br /&gt;
&lt;br /&gt;
Once you've read in your values, the following single line of code&lt;br /&gt;
will print them all out for you:&lt;br /&gt;
&lt;br /&gt;
print "$_ = $hash_table{$_}\n" foreach keys %hash_table;&lt;/in&gt;&lt;/in&gt;&lt;/name_file")&gt;&lt;/in&gt;&lt;br /&gt;
&lt;br /&gt;
4) Does Perl have reference type?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
$str="here we go"&amp;nbsp; ;&amp;nbsp; # a scalar variable &lt;br /&gt;
$strref = \$str;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # a reference to a scalar&lt;br /&gt;
&lt;br /&gt;
@array=(1..10);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # an array&lt;br /&gt;
$arrayref =\@array;&amp;nbsp; # a reference to an array.&lt;br /&gt;
&lt;br /&gt;
%hash=(key1=&amp;gt;vaule1,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; key2=&amp;gt;value2 &lt;br /&gt;
);&lt;br /&gt;
$rhash-ref =\%hash;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) How to initialize a hash?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
my %hash = ();&amp;nbsp;&amp;nbsp;&amp;nbsp; # initialize a hash&lt;br /&gt;
my $hash_ref = {};&amp;nbsp; # reference to empty hash&lt;br /&gt;
&lt;br /&gt;
5) How to add data into hash?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
$hash{ 'key' } = 'value';&amp;nbsp;&amp;nbsp;&amp;nbsp; # hash&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $hash{ $key } = $value;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # hash, using variables&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $href-&amp;gt;{ 'key' } = 'value';&amp;nbsp; # hash ref&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $href-&amp;gt;{ $key } = $value;&amp;nbsp;&amp;nbsp;&amp;nbsp; # hash ref, using variables&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; %hash = ( 'key1', 'value1', 'key2', 'value2', 'key3', 'value3' ); # add multiple items&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; %hash = (&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key1 =&amp;gt; 'value1',&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key2 =&amp;gt; 'value2',&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key3 =&amp;gt; 'value3',&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&lt;br /&gt;
6) How to copy hash?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; my %hash_copy = %hash;&amp;nbsp; # copy a hash&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; my $href_copy = $href;&amp;nbsp; # copy a hash ref&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7)&amp;nbsp; How to use while or for loop with Hash? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use each within a while loop. Note that each iterates over entries in an apparently random order, but that order is guaranteed to be the same for the functions keys and values.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( my ($key, $value) = each(%hash) ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$key =&amp;gt; $value\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A hash reference would be only slightly different:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( my ($key, $value) = each(%$hash_ref) ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$key =&amp;gt; $value\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Use keys with a for loop.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for my $key ( keys %hash ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $value = $hash{$key};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "$key =&amp;gt; $value\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
8) What's the size of the hash?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
print "size of hash:&amp;nbsp; " . keys( %hash ) . ".\n";&lt;br /&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;a href="http://www.cs.mcgill.ca/%7Eabatko/computers/programming/perl/howto/hash/" linkindex="15"&gt;Extra Hash information&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-8109163471184203341?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M7l_iIfSsmKVjGBzCwrWzTBbbUg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M7l_iIfSsmKVjGBzCwrWzTBbbUg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M7l_iIfSsmKVjGBzCwrWzTBbbUg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M7l_iIfSsmKVjGBzCwrWzTBbbUg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/yB2pjio5f44" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/8109163471184203341/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-6.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8109163471184203341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/8109163471184203341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/yB2pjio5f44/perl-interview-questions-part-6.html" title="Perl interview questions Part #7" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MNQn48cCp7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-3266498379593646916</id><published>2010-02-16T13:05:00.000-08:00</published><updated>2010-02-17T11:38:13.078-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T11:38:13.078-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #6</title><content type="html">1) Explain the difference between the following in Perl:&lt;br /&gt;
$array[3] vs $array-&amp;gt;[3]&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
$array[3] is the 4th element of the array "array"&lt;br /&gt;
$array-&amp;gt;[3] is the hard reference to a (possible anonymous) array. It's the 4th element of the referenced array.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) How to remove duplicates from an array?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
@array=(2,4,3,3,6,2);&lt;br /&gt;
my %seen=();&lt;br /&gt;
my @unique = grep { !seen{$_}++} @array;&lt;br /&gt;
print "@unique";&lt;br /&gt;
&lt;br /&gt;
3) What is Perl on-liner?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
There are two ways a perl scripts can be run: &lt;br /&gt;
1. From a command line, called one-liner. It may contains many statements in one line.&lt;br /&gt;
e.g. perl -e "print \"Hello\";"&lt;br /&gt;
&lt;br /&gt;
2. Script file, Perl program&lt;br /&gt;
e.g. perl program.pl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-3266498379593646916?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tjQZobeaoE7K8dIwIcUJe1Q5Fac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tjQZobeaoE7K8dIwIcUJe1Q5Fac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tjQZobeaoE7K8dIwIcUJe1Q5Fac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tjQZobeaoE7K8dIwIcUJe1Q5Fac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/2S-7GUqgBB8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/3266498379593646916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-5.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3266498379593646916?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3266498379593646916?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/2S-7GUqgBB8/perl-interview-questions-part-5.html" title="Perl interview questions Part #6" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MDSXk4fyp7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-828941663196611260</id><published>2010-02-16T11:53:00.000-08:00</published><updated>2010-02-17T11:37:58.737-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T11:37:58.737-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #5</title><content type="html">1) How to open and read data files with Perl?&lt;br /&gt;
&lt;br /&gt;
Answer: &lt;br /&gt;
&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
&lt;br /&gt;
print ("Word to search for: $ARGV[0]\n");&lt;br /&gt;
$filecount =1;&lt;br /&gt;
$totalwordcount = 0;&lt;br /&gt;
&lt;br /&gt;
while($filecount &amp;lt;= @ARGV-1) {   unless (open (INFILE, $ARGV[$filecount]\n");         die ("Can't open input file $ARGV[$filecount]\n");   }   $wordcount =0;   while($line=&lt;infile&gt;) {&lt;br /&gt;
chop($line);&lt;br /&gt;
@words = split(/ /, $line);&lt;br /&gt;
$w =1;&lt;br /&gt;
while ($w&amp;lt;=@words) {&lt;br /&gt;
if ($words[$w-1] eq $ARGV[0]) {&lt;br /&gt;
$wordcount +=1;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
print ("occurrences in file $ARGV[$filecount]: ");&lt;br /&gt;
print ("$wordcount\n");&lt;br /&gt;
$filecount ++;&lt;br /&gt;
$totalwordcount +=$wordcount;&lt;br /&gt;
}&lt;br /&gt;
print ("total number of occurrences: $totalwordcount\n");&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Command line:&lt;br /&gt;
$perl program ERROR log1 log2&lt;br /&gt;
Word to search for: ERROR&lt;br /&gt;
occurrences in file log1: 1&lt;br /&gt;
occurrences in file log2: 0&lt;br /&gt;
total number of occurrences: 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) How do I do fill_in_the_blank for each file in a directory?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
# print out a list of files in the current directory&lt;br /&gt;
&lt;br /&gt;
#!/usr/perl -w &lt;br /&gt;
opendir(DIR, ".");&lt;br /&gt;
@file=readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach $file(@files) {print "$file\n");&lt;br /&gt;
}&lt;/infile&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-828941663196611260?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bdIE6pGlL29qfm3W33T-b3tIaH8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdIE6pGlL29qfm3W33T-b3tIaH8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bdIE6pGlL29qfm3W33T-b3tIaH8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdIE6pGlL29qfm3W33T-b3tIaH8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/835dUDAGpnQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/828941663196611260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-4.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/828941663196611260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/828941663196611260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/835dUDAGpnQ/perl-interview-questions-part-4.html" title="Perl interview questions Part #5" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MASXczfCp7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-9097635629412365611</id><published>2010-02-16T11:15:00.000-08:00</published><updated>2010-02-17T11:37:28.984-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T11:37:28.984-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #4</title><content type="html">1) What is the difference between for and foreach?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
There's no difference between them.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
# For loop example &lt;br /&gt;
for ($count=1; $count&amp;lt;=@words; $count++){&lt;br /&gt;
&amp;nbsp; if($words[$count-1] eq "the" ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("found the word 'the'\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# foreach loop example &lt;br /&gt;
foreach $word(@words) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; if ($word eq "the" {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; print ("found the word 'the'\n");&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&amp;nbsp; while loop example&lt;br /&gt;
$count =1;&lt;br /&gt;
while ($count&amp;lt;=@words) {&lt;br /&gt;
if($words[$count-1] eq "the" ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("found the word  'the'\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; $count++;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp; What is the difference between exec and system?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
exec runs the given process, switches to its name and never returns&lt;br /&gt;
e.g. exec(PROGRAM);&lt;br /&gt;
&lt;br /&gt;
system folks the given process, wait for its to complete and then return.&lt;br /&gt;
e.g. $result = system(PROGRAM);&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
3) What does this symbol mean '-&amp;gt;'?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
In Perl, it is an infix dereference operator, for array or hash key, or a subroutine, then the ihs must be a reference. It can also used as method invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="POD_TEXT"&gt;The arrow operator also allows you to dereference references to arrays  or hashes.  The arrow operator makes more complex structures easier to  read.  The first example shows accessing an element of an array  reference: &lt;/div&gt;&lt;class="pod_verbatim"&gt;&lt;br /&gt;
&lt;class="pod_verbatim"&gt;#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
my $array_ref = ['apple', 'banana', 'orange'];&lt;br /&gt;
print "My first fruit is: " . $array_ref-&amp;gt;[0] . "\n";&lt;br /&gt;
&lt;/class="pod_verbatim"&gt;&lt;/class="pod_verbatim"&gt;&lt;br /&gt;
&lt;div class="POD_TEXT"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="POD_TEXT"&gt;This would produce the following output: &lt;/div&gt;&lt;class="pod_output"&gt;My first fruit is: apple&lt;br /&gt;
&lt;/class="pod_output"&gt;&lt;br /&gt;
&lt;div class="POD_TEXT"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="POD_TEXT"&gt;The next example shows accessing elements of an hash refernce: &lt;/div&gt;&lt;class="pod_verbatim"&gt;#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
my $hash_ref = {name =&amp;gt; 'Becky', age =&amp;gt; 23};&lt;br /&gt;
foreach my $k (keys %$hash_ref) {&lt;br /&gt;
print "$k: " . $hash_ref-&amp;gt;{$k} . "\n";&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
This produces the following output: &lt;br /&gt;
name: Becky&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Subroutine references work the same way, using parenthesis: &lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
my %hash = (frogs =&amp;gt; sub {print "Frogs\n"});&lt;br /&gt;
$hash{$frogs}-&amp;gt;();&lt;br /&gt;
4) Perl regular exp are greedy. What is it mean by that?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
It tries to match the longest string possible.&lt;br /&gt;
&lt;br /&gt;
5) What is the difference between C++ and Perl?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
1. Perl can have objects whose data cannot be accessed outside its class,&lt;br /&gt;
but C++ cannot do it.&lt;br /&gt;
&lt;br /&gt;
2. Perl can use closures with unreachable private data as objects,&lt;br /&gt;
and C++ doesn't support closures.&lt;br /&gt;
&lt;br /&gt;
e.g. my $print_hello = sub { print "Hello, world!"; }&lt;br /&gt;
$print_hello-&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
3. C++ does support pointer arithmetic via 'int *ip=(int*)&amp;amp;object', allowing you do&lt;br /&gt;
look over the object. Perl doesn't support pointer arithmetic.&lt;br /&gt;
&lt;br /&gt;
4. C++ supports '#define private public' to change the access right to foreign&amp;nbsp;object. Perl doesn't support them.&lt;/class="pod_verbatim"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-9097635629412365611?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/072dzocvvgnPufpHwfMYW6Shcuc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/072dzocvvgnPufpHwfMYW6Shcuc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/072dzocvvgnPufpHwfMYW6Shcuc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/072dzocvvgnPufpHwfMYW6Shcuc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/kOzdf0jcDYI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/9097635629412365611/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-3_16.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/9097635629412365611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/9097635629412365611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/kOzdf0jcDYI/perl-interview-questions-part-3_16.html" title="Perl interview questions Part #4" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-3_16.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNSXs5eSp7ImA9WxBVE0k.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-4270239548387857136</id><published>2010-02-16T06:59:00.000-08:00</published><updated>2010-02-16T11:23:18.521-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T11:23:18.521-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #3</title><content type="html">1) What is the difference between die and exit?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
Die prints out stderr message in the terminal before exiting the program. Die also can evaluate expression before exiting.&lt;br /&gt;
Exit just terminates the program&lt;br /&gt;
&lt;br /&gt;
2) Where do you go for perl help?&lt;br /&gt;
&lt;br /&gt;
Answer: perldoc command with -f option is the best.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
3) What is scalar, array and hash in perl?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
Perl has 3 command data type:&lt;br /&gt;
&lt;br /&gt;
$scalar is the basic variable. It could be letters, digits and underscore characters &lt;br /&gt;
&lt;br /&gt;
$array is a collection of scalar.&lt;br /&gt;
e.g. @fruit = ("apple", "bananas", "orange");&lt;br /&gt;
&lt;br /&gt;
foreach $goodfruit (@fruit) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; if ($goodfruit eq "apple")&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; print ("found $goodfruit in the list\n");&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
%hash: it is like an associative array. It is a collection of scalar data with individual elements selected by some index value which essentially are scalars and called as keys. Each key corresponds to some values.&lt;br /&gt;
&lt;br /&gt;
e.g. &lt;br /&gt;
&lt;br /&gt;
%fruit = ( "apple"=&amp;gt; 17,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "bananas"=&amp;gt;9,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "oranges"=&amp;gt;"none");&lt;br /&gt;
&lt;br /&gt;
foreach $holder (keys(%fruit))&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $numfruit = %fruit{$holder};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("$holder = $numfruit \n");&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
4) What does 'qw()' mean? What is the use of it?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
qw is a construct which quotes word delimited by spaces.&lt;br /&gt;
e.g. @array = qw(1234); &amp;nbsp; # same as @array=("1","2","3","4");&lt;br /&gt;
&lt;br /&gt;
5) What is the difference between Perl and shell script? &lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
Whatever you can do in the shell script, it can be done in Perl. However, Perl gives you an extened advantages of having enormous library. You don't need to write everything from scartch.&lt;br /&gt;
&lt;br /&gt;
6) What is stderr() in Perl?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
A special file handler to standard error in any package.&lt;br /&gt;
&lt;br /&gt;
7) What is a regular expression?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
It defines a pattern for a search to match.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Simple String Comparisons&lt;/h2&gt;The most basic string comparison is &lt;pre&gt;$string &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=%7E" linkindex="78"&gt;=~&lt;/a&gt; &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_m" linkindex="79"&gt;m&lt;/a&gt;&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_/" linkindex="80"&gt;/&lt;/a&gt;sought_text&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_/" linkindex="81"&gt;/&lt;/a&gt;;&lt;/pre&gt;The above returns true if string $string contains substring  "sought_text", false otherwise.&lt;br /&gt;
&lt;br /&gt;
If you want only those strings where the sought text  appears at the very beginning, you could write the following: &lt;br /&gt;
&lt;pre&gt;$string &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=%7E" linkindex="82"&gt;=~&lt;/a&gt; &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_m" linkindex="83"&gt;m&lt;/a&gt;/&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_%5E" linkindex="84"&gt;^&lt;/a&gt;sought_text/;&lt;/pre&gt;&lt;br /&gt;
Similarly, the $ operator indicates "end of string". If you wanted to  find out if the sought text was the very last text in the string, you could  write this: &lt;br /&gt;
&lt;pre&gt;$string &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=%7E" linkindex="85"&gt;=~&lt;/a&gt; &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_m" linkindex="86"&gt;m&lt;/a&gt;/sought_text&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_$" linkindex="87"&gt;$&lt;/a&gt;/;&lt;/pre&gt;&lt;br /&gt;
Now, if you want the comparison to be true only if $string contains the  sought text and nothing but the sought text, simply do this: &lt;br /&gt;
&lt;pre&gt;$string &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=%7E" linkindex="88"&gt;=~&lt;/a&gt; &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_m" linkindex="89"&gt;m&lt;/a&gt;/&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_%5E" linkindex="90"&gt;^&lt;/a&gt;sought_text&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_$" linkindex="91"&gt;$&lt;/a&gt;/;&lt;/pre&gt;&lt;br /&gt;
Now what if you want the comparison to be case insensitive? All you do  is add the letter i after the ending delimiter: &lt;br /&gt;
&lt;pre&gt;$string &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=%7E" linkindex="92"&gt;=~&lt;/a&gt; &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_m" linkindex="93"&gt;m&lt;/a&gt;/&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_%5E" linkindex="94"&gt;^&lt;/a&gt;sought_text&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_$" linkindex="95"&gt;$&lt;/a&gt;/&lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_i" linkindex="96"&gt;i&lt;/a&gt;;&lt;/pre&gt;&lt;h2&gt;Using Simple "Wildcards" and "Repetitions"&lt;/h2&gt;Calling these "wildcards" may actually conflict with the theoretical  grammar and syntax of Perl, but in fact is the most intuitive way to think of  it, and will not lead to any coding mistakes. &lt;pre&gt;.&amp;nbsp;&amp;nbsp; Match any character
\w&amp;nbsp; Match "word" character (alphanumeric plus "_")
\W&amp;nbsp; Match non-word character
\s&amp;nbsp; Match whitespace character
\S&amp;nbsp; Match non-whitespace character
\d&amp;nbsp; Match digit character
\D&amp;nbsp; Match non-digit character
\t&amp;nbsp; Match tab
\n&amp;nbsp; Match newline
\r&amp;nbsp; Match return
\f&amp;nbsp; Match formfeed
\a&amp;nbsp; Match alarm (bell, beep, etc)
\e&amp;nbsp; Match escape
\021&amp;nbsp; Match octal char ( in this case 21 octal)
\xf0&amp;nbsp; Match hex char ( in this case f0 hexidecimal)&lt;/pre&gt;&lt;br /&gt;
You can follow any character, wildcard, or series of characters and/or  wildcard with a repetiton. Here's where you start getting some power: &lt;br /&gt;
&lt;pre&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Match 0 or more times
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Match 1 or more times
?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Match 1 or 0 times
{n}&amp;nbsp;&amp;nbsp;&amp;nbsp; Match exactly n times
{n,}&amp;nbsp;&amp;nbsp; Match at least n times
{n,m}&amp;nbsp; Match at least n but not more than m times&lt;/pre&gt;Now for some examples: &lt;pre&gt;$string =~ m/\s*rem/i;&amp;nbsp;&amp;nbsp; #true if the first printable text is rem or REM&lt;/pre&gt;&lt;pre&gt;$string =~ m/^\S{1,8}\.\S{0,3}/;&amp;nbsp;&amp;nbsp; # check for DOS 8.3 filename&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&amp;nbsp; (note a few illegals can sneak thru&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-4270239548387857136?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8xECPrabCXYqYeWOFVLOFVWrVPA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8xECPrabCXYqYeWOFVLOFVWrVPA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8xECPrabCXYqYeWOFVLOFVWrVPA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8xECPrabCXYqYeWOFVLOFVWrVPA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/yeG5GesQ6B4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/4270239548387857136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-3.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4270239548387857136?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/4270239548387857136?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/yeG5GesQ6B4/perl-interview-questions-part-3.html" title="Perl interview questions Part #3" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04BRn8_fCp7ImA9WxBVFEg.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-2789259340090783014</id><published>2010-02-16T06:06:00.000-08:00</published><updated>2010-02-17T17:19:17.144-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T17:19:17.144-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #2</title><content type="html">1) How to substitute a particular string in a file containing million of record?&lt;br /&gt;
&lt;br /&gt;
perl -p -i bak -e 's/search_str/replace_str/g' filename&lt;br /&gt;
&lt;br /&gt;
-p&amp;nbsp; Is name a named pipe?&lt;br /&gt;
-e&amp;nbsp; Evaluate replacement string as expression&lt;br /&gt;
-g change all occurances of the pattern&lt;br /&gt;
-i&amp;nbsp; ignore case in pattern&lt;br /&gt;
&lt;br /&gt;
Or you can write the following code:&lt;br /&gt;
&lt;br /&gt;
--replace.pl--- &lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl &lt;br /&gt;
&lt;br /&gt;
if(-e $ARGV[0]) &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp; &amp;nbsp; $cmd = 'copy $ARGV[0] $ARGV[0].bak'; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; `$cmd`; &lt;br /&gt;
} &lt;br /&gt;
else &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp; &amp;nbsp; print 'File does not exist.\n'; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; exit; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
open(INPUT,'$ARGV[0].bak') or die 'Cannot open file: $!\n'; &lt;br /&gt;
open(OUTPUT,'&amp;gt;$ARGV[0]'); &lt;br /&gt;
&lt;br /&gt;
while(INPUT){ &lt;br /&gt;
&amp;nbsp; &amp;nbsp; $_ =~ s/$ARGV[1]/$ARGV[2]/g; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; print $_; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; print OUTPUT $_; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
close INPUT; &lt;br /&gt;
close OUTPUT; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) How to implement stack in Perl?&lt;br /&gt;
&lt;br /&gt;
Answer: Use puch() &amp;amp; pop() function in the perl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g.&amp;nbsp; @myNames = ('Larry', 'Curly');&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push(@myNames, 'Moe'); # it push a value onto the end of the array.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&amp;nbsp; @myNames = ('Larry', 'Curly', 'Moe');&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $oneName= pop(@myNames);&amp;nbsp;&amp;nbsp;&amp;nbsp; # it remove and return the last element of the array&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; #&amp;nbsp; @myNames = ('Larry', 'Curly');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # $oneName = 'Moe'&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;shift()&lt;/b&gt; function is used to remove and return the first element  from an array.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $oneName= shift(@myNames);&amp;nbsp;&amp;nbsp;&amp;nbsp; # it remove and return the first element  of the array&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; #&amp;nbsp; @myNames = ('Curly', 'Moe');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  # $oneName = 'Larry'&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;b&gt;unshift()&lt;/b&gt; function is used to add a value or values onto the  beginning of an array.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @myNames = ('Curly', 'Moe');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unshift(@myNames, 'Larry'); # @myName =('Larry', 'Curly', 'Moe')&lt;br /&gt;
&lt;br /&gt;
3) What is Grep used for in Perl?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;blockquote class="yes"&gt;@LIST = grep(EXPRESSION, @ARRAY); &lt;/blockquote&gt;Perl's &lt;b&gt;grep()&lt;/b&gt; function runs a regular expression on each element  of an array, and returns only the elements that evaluate to &lt;b&gt;true&lt;/b&gt;.  &lt;br /&gt;
&lt;br /&gt;
@myNames = ('Jacob', 'Michael', 'Joshua', 'Matthew', 'Alexander',  'Andrew');&lt;br /&gt;
@grepNames = grep(/^A/, @myNames);&amp;nbsp; # &lt;b&gt;@grepNames&lt;/b&gt; becomes &lt;b&gt;('Alexander', 'Andrew')&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Explain the difference between 'my' and 'local' variable scope declarations?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Both of them are used to declare local variables. The variables declared with 'my' can live only within the block and cannot gets it's visibility inherited functions called within that block. The "local" variables can live within the block and have its visibility in the functions called within the block.&lt;br /&gt;
&lt;br /&gt;
5) Wat are the arguments w normally use for Perl interpreter? &lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
-e for execute&lt;br /&gt;
-c to compile&lt;br /&gt;
-d to call the debugger on the file specified&lt;br /&gt;
-T for traint mode for security/input checking&lt;br /&gt;
-W for show all warning mode&lt;br /&gt;
-w to show less warning&lt;br /&gt;
-strict pragma is used when you should declare variables before their use&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
6) What is it meants by '$_' ?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
It is a default variable which holds automatically, a list of arguments passed to the subroutine within parentheses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-2789259340090783014?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jrpKRurJSwUkG-lKonwiu12VcLM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jrpKRurJSwUkG-lKonwiu12VcLM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jrpKRurJSwUkG-lKonwiu12VcLM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jrpKRurJSwUkG-lKonwiu12VcLM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/ApOnvpJf4cM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/2789259340090783014/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-2.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/2789259340090783014?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/2789259340090783014?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/ApOnvpJf4cM/perl-interview-questions-part-2.html" title="Perl interview questions Part #2" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions-part-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAQ3Y-fSp7ImA9WxBVE08.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-3582326537504246339</id><published>2010-02-15T21:25:00.000-08:00</published><updated>2010-02-16T06:07:22.855-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T06:07:22.855-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl interview questions Part #1</title><content type="html">&lt;span style="font-size: small;"&gt;1) How do you know the reference of a variable whether it is a reference, scaller, hash or array?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Answer:&amp;nbsp; &amp;nbsp; Perl provides the &lt;tt&gt;ref()&lt;/tt&gt; function so that you can check the reference type before dereferencing a reference.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;If the referenced object has been blessed into a package, then that  package name is returned instead. You can think of &lt;a href="http://www.sdsc.edu/%7Emoreland/courses/IntroPerl/docs/manual/pod/perlfunc/ref.html" linkindex="16"&gt;ref()&lt;/a&gt;  as a typeof() operator.  &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;e.g. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;if (ref($r) eq "HASH") {&lt;br /&gt;
print "r is a reference to a hash.\n";&lt;br /&gt;
}&lt;br /&gt;
if (!ref($r)) {&lt;br /&gt;
print "r is not a reference at all.\n";&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt; 2) What is the difference between "chop" and "chomp" function?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Answer:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;"Chop" function removes the last character completely from the scaler.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;"Chomp" function removes the last character if it is newline. By default, chomp&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;use the current define $INPUT_RECORD_SEPARATOR $/( default value 'n' ).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;3) Print this array @not_sort_list in reversed case-insensitive order&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Answer:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;@sort_list = sort {lc($a) cmp lc($b)} @not_sort_list;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;lc function convert all character into lower case&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;4) What is '-&amp;gt;' in Perl?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Answer:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;It's a symbolic link to link one file name to a new name.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;e.g. file1-&amp;gt;file2,  vi file1  =&amp;gt; you are really read the file2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;5) How do you create a directory if not there? &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Answer:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;use strict;&lt;br /&gt;
my $path = "folder1/folder2/folder3";&lt;br /&gt;
# need to use forward slashes for perl, even under windows.&lt;br /&gt;
my $createdir="mkdir -p $path";&lt;br /&gt;
# does mkdir -p work under windows???&lt;br /&gt;
if (-d $path)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
print "$path exists\n" }&lt;br /&gt;
else &lt;br /&gt;
&amp;nbsp;&amp;nbsp;{ print "mkdir failed\n" unless &lt;br /&gt;
system($createdir) }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-3582326537504246339?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GH5xFP9mW7Pktc35-2jU5FUMYXg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GH5xFP9mW7Pktc35-2jU5FUMYXg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GH5xFP9mW7Pktc35-2jU5FUMYXg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GH5xFP9mW7Pktc35-2jU5FUMYXg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/IbpeVh029Q0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/3582326537504246339/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-interview-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3582326537504246339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/3582326537504246339?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/IbpeVh029Q0/perl-interview-questions.html" title="Perl interview questions Part #1" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAHRXgzfSp7ImA9WxBVEkk.&quot;"><id>tag:blogger.com,1999:blog-3787854007361038232.post-1843121155164298050</id><published>2010-02-15T06:05:00.000-08:00</published><updated>2010-02-15T06:05:34.685-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T06:05:34.685-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>Perl Script basic</title><content type="html">&lt;b&gt;Perl&lt;/b&gt; is know as &lt;span style="color: red;"&gt;interpretive languages.&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="background-color: black; color: black;"&gt;&lt;span style="background-color: black;"&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="color: white;"&gt;It does not require more complicated processing. C++ or C are compiled language.&lt;/span&gt;&lt;span&gt;&lt;span style="background-color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;String and numeric comparison operators&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" bordercolor="#111111" cellpadding="0" cellspacing="0" id="AutoNumber1" style="border-collapse: collapse;"&gt;&lt;tbody&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;String Operator&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Comparison&lt;/td&gt;     &lt;td align="center" width="34%"&gt;Equivalent numeric operator&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;lt&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Less Then&lt;/td&gt;     &lt;td align="center" width="34%"&gt;&amp;lt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;gt&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Greater than&lt;/td&gt;     &lt;td align="center" width="34%"&gt;&amp;gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;eq&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Equal to&lt;/td&gt;     &lt;td align="center" width="34%"&gt;==&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;le&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Less than or equal to&lt;/td&gt;     &lt;td align="center" width="34%"&gt;&amp;lt;=&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;ge&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Greater than or equal to&lt;/td&gt;     &lt;td align="center" width="34%"&gt;&amp;gt;=&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;ne&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Not equal to&lt;/td&gt;     &lt;td align="center" width="34%"&gt;!=&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td align="center" width="33%"&gt;cmp&lt;/td&gt;     &lt;td align="center" width="33%"&gt;Compare , returning 1 (greater then),&lt;br /&gt;
0 &lt;br /&gt;
(equal) , -1 ( less than)&lt;/td&gt;     &lt;td align="center" width="34%"&gt;&amp;lt;=&amp;gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Single-Quoted strings vs Double-Quoted String:&lt;/b&gt;&lt;br /&gt;
1) double-quoted strings is that scalar variables are replaced by their values in double-quoted strings but not in single quoted string.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; e.g.&lt;br /&gt;
&amp;nbsp; $string = " a string";&lt;br /&gt;
&amp;nbsp; $text = " This is $string";&amp;nbsp;&amp;nbsp;&amp;nbsp; # become " This is a string"&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $text = 'This is $string';&amp;nbsp;&amp;nbsp; # remains 'This is $string'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) The\ character has not special meanings in single-quoted strings:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $text ='This is a string.\n' # remains This is a string. \n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conditional Operator:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
$result =$var ==0 ? 14: 7;&lt;br /&gt;
&lt;br /&gt;
is identical to the following:&lt;br /&gt;
&lt;br /&gt;
if($var==0) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = 14;&lt;br /&gt;
} else{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = 7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Examples of assignment operators:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
$a +=1;&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp; $a= $a +1;&lt;br /&gt;
$a %= 2;&amp;nbsp;&amp;nbsp; # $a = $a%2 ; reminder and assignment&lt;br /&gt;
$a ^=2;&amp;nbsp; # $a =$a ^2; bitwise XOR and assignment&lt;br /&gt;
++$a ;&amp;nbsp; # autoincrement, pre-increment operation, add 1 before doing anything&lt;br /&gt;
$a++;&amp;nbsp;&amp;nbsp; # post-increment operation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3787854007361038232-1843121155164298050?l=asic-interview.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tKcUlSTob1UmqsGY4RnnUxxfVR8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tKcUlSTob1UmqsGY4RnnUxxfVR8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tKcUlSTob1UmqsGY4RnnUxxfVR8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tKcUlSTob1UmqsGY4RnnUxxfVR8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AsicInterviewQuestionAnswer/~4/e5tBilzsjBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://asic-interview.blogspot.com/feeds/1843121155164298050/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://asic-interview.blogspot.com/2010/02/perl-script-basic.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1843121155164298050?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3787854007361038232/posts/default/1843121155164298050?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AsicInterviewQuestionAnswer/~3/e5tBilzsjBs/perl-script-basic.html" title="Perl Script basic" /><author><name>Roy Chan</name><uri>http://www.blogger.com/profile/12065516683752353337</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://asic-interview.blogspot.com/2010/02/perl-script-basic.html</feedburner:origLink></entry></feed>

