@@ -1839,7 +1839,7 @@ fn concat() {
18391839 o: output logic<16>,
18401840 o2: output logic<16>,
18411841) {
1842- assign o = {8'hff + 8'h1};
1842+ assign o = {8'hff + 8'h1};
18431843 assign o2 = {8'hf0, 8'hff + 8'h1};
18441844}
18451845 "# ;
@@ -1857,3 +1857,99 @@ fn concat() {
18571857"# ;
18581858 check_ir ( code, exp) ;
18591859}
1860+
1861+ #[ test]
1862+ fn proto_function ( ) {
1863+ let code = r#"
1864+ proto package Element {
1865+ type data;
1866+ function gt(a: input data, b: input data) -> logic;
1867+ }
1868+ package IntElement for Element {
1869+ type data = logic<8>;
1870+ function gt(a: input data, b: input data) -> logic {
1871+ return a >: b;
1872+ }
1873+ }
1874+ module ModuleA::<E: Element> (
1875+ a: input E::data,
1876+ b: input E::data,
1877+ r: output logic,
1878+ ) {
1879+ always_comb {
1880+ r = E::gt(a, b);
1881+ }
1882+ }
1883+ module Top (
1884+ a: input logic<8>,
1885+ b: input logic<8>,
1886+ r: output logic,
1887+ ) {
1888+ inst inner: ModuleA::<IntElement> (a, b, r);
1889+ }
1890+ "# ;
1891+ let exp = r#"module ModuleA {
1892+ input var0(a): unknown = 1'hx;
1893+ input var1(b): unknown = 1'hx;
1894+ output var2(r): logic = 1'hx;
1895+
1896+ comb {
1897+ var2 = unknown;
1898+ }
1899+ }
1900+ module Top {
1901+ input var0(a): logic<8> = 8'hxx;
1902+ input var1(b): logic<8> = 8'hxx;
1903+ output var2(r): logic = 1'hx;
1904+
1905+ inst inner (
1906+ var0 <- var0;
1907+ var1 <- var1;
1908+ var2 -> var2;
1909+ ) {
1910+ module ModuleA {
1911+ input var0(a): logic<8> = 8'hxx;
1912+ input var1(b): logic<8> = 8'hxx;
1913+ output var2(r): logic = 1'hx;
1914+ var var4(E.gt.return): logic = 1'hx;
1915+ input var5(E.gt.a): logic<8> = 8'hxx;
1916+ input var6(E.gt.b): logic<8> = 8'hxx;
1917+ func var3(E.gt) -> var4 {
1918+ var4 = (var5 >: var6);
1919+ }
1920+
1921+ comb {
1922+ var2 = var3(a: var0, b: var1);
1923+ }
1924+ }
1925+ }
1926+ }
1927+ "# ;
1928+ check_ir ( code, exp) ;
1929+ }
1930+
1931+ #[ test]
1932+ fn binary_operation_with_large_width_variable ( ) {
1933+ let code = r#"
1934+ module Top (
1935+ a: input logic<65>,
1936+ b: output logic ,
1937+ ) {
1938+ always_comb {
1939+ b = a == '0;
1940+ }
1941+ }
1942+ "# ;
1943+
1944+ let exp = r#"module Top {
1945+ input var0(a): logic<65> = 65'hxxxxxxxxxxxxxxxxx;
1946+ output var1(b): logic = 1'hx;
1947+
1948+ comb {
1949+ var1 = (var0 == '0);
1950+ }
1951+ }
1952+ "# ;
1953+
1954+ check_ir ( code, exp) ;
1955+ }
0 commit comments