ASIC

您所在的位置:网站首页 verilog括号运算符 ASIC

ASIC

2023-10-15 18:39| 来源: 网络整理| 查看: 265

 写在前面

        在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。

        这是网站原文:Verilog Tutorial

        这是系列导航:Verilog教程系列文章导航

算术运算符(Arithmetic Operators)          二元运算符:+、-、*、/、%(取模运算符)一元运算符:+、-(这个用来指定符号)整数除法截断任何小数部分模运算的结果符号取第一个操作数的符号如果任何操作数位值是未知值 x,则整个结果值是 x寄存器数据类型用作无符号值(负数以补码形式存储)

       

        这是一些算术运算的示例:

module arithmetic_operators(); initial begin $display (" 5 + 10 = %d", 5 + 10); $display (" 5 - 10 = %d", 5 - 10); $display (" 10 - 5 = %d", 10 - 5); $display (" 10 * 5 = %d", 10 * 5); $display (" 10 / 5 = %d", 10 / 5); $display (" 10 / -5 = %d", 10 / -5); $display (" 10 %s 3 = %d","%", 10 % 3); $display (" +5 = %d", +5); $display (" -5 = %d", -5); #10 $finish; end endmodule

        

        这是仿真结果:

5 + 10 = 15 5 - 10 = -5 10 - 5 = 5 10 * 5 = 50 10 / 5 = 2 10 / -5 = -2 10 % 3 = 1 +5 = 5 -5 = -5 关系运算符(Relational Operators)

运算符

描述

a < b

a 小于 b

a > b

a 大于 b

a = b

a 大于等于 b 结果是一个标量值(例如 a < b)如果关系为假则结果为0(a 比 b 大)如果关系为真则结果为1(a 小于 b)如果任何操作数具有未知的 x 位则结果为x(如果 a 或 b 包含 X)

        注:如果任何操作数是 x 或 z,则该测试的结果将被视为假 (0)

        这是一些关系运算的示例:

module relational_operators(); initial begin $display (" 5 = 10 = %b", (5 >= 10)); $display (" 1'bx > 1)); $display (" 4'b10x1 >> 1 = %b", (4'b10x1 >> 1)); $display (" 4'b10z1 >> 1 = %b", (4'b10z1 >> 1)); #10 $finish; end endmodule

        这是仿真结果: 

4'b1001 > 1 = 010x 4'b10z1 >> 1 = 010z

拼接运算符(Concatenation Operator) 拼接使用大括号字符 { 和 } 表示,用逗号分隔其中的表达式 示例:+ {a, b[3:0], c, 4'b1001} // 如果 a 和 c 是 8 位数字,则结果有 24 位拼接中不允许有未定大小的常数

        

        这是一些拼接运算的示例:

module concatenation_operator(); initial begin // concatenation $display (" {4'b1001,4'b10x1} = %b", {4'b1001,4'b10x1}); #10 $finish; end endmodule

        这是仿真结果:

{4'b1001,4'b10x1} = 100110x1

复制运算符(Replication Operators)

        复制运算符用于将一组位复制 n 次。假设你有一个 4 位变量,你想复制它 4 次以获得一个 16 位变量:那么我们可以使用复制运算符。

运算符

描述

{n{m}}

复制m的值n次

 可以使用重复的乘数(必须是常量): {3{a}} // 这相当于 {a, a, a}嵌套拼接和复制运算符是可能的: {b, {3{c, d}}} // 这相当于 {b, c, d, c, d, c, d}

        

        这是一些复制运算的示例:

module replication_operator(); initial begin // replication $display (" {4{4'b1001}} = %b", {4{4'b1001}}); // replication and concatenation $display (" {4{4'b1001,1'bz}} = %b", {4{4'b1001,1'bz}}); #10 $finish; end endmodule

        这是仿真结果: 

{4{4'b1001} = 1001100110011001 {4{4'b1001,1'bz} = 1001z1001z1001z1001z

条件运算符(Conditional Operators) 条件运算符具有以下类似 C 的格式: cond_expr ? true_expr : false_exprtrue_expr 或 false_expr 的计算结果取决于 cond_expr 的计算结果(true 或 false)

        这是一些条件运算的示例:

module conditional_operator(); wire out; reg enable,data; // Tri state buffer assign out = (enable) ? data : 1'bz; initial begin $display ("time\t enable data out"); $monitor ("%g\t %b %b %b",$time,enable,data,out); enable = 0; data = 0; #1 data = 1; #1 data = 0; #1 enable = 1; #1 data = 1; #1 data = 0; #1 enable = 0; #10 $finish; end endmodule

        这是仿真结果: 

 time     enable data out  0     0      0    z  1     0      1    z  2     0      0    z  3     1      0    0  4     1      1    1  5     1      0    0  6     0      0    z



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3