20220718-Ts刷Leetcode

204 阅读1分钟

LeetCode刷题807

807. 保持城市天际线

基本思路:对于每个点而言,其增加到的最高高度为横向最大值和纵向最大值的最小值,如下图所示:

image.png

红色线中间点的高度为2,横向对最大值为9,增加7不影响横向视图;纵向最大值为4,增加2不影响纵向视图,因此2最大可以增加到4

Typescript的解法:

image.png

Typescript相关内容笔记

  • Array.length:数组长度
  • Math:数学库
  • Array.map(func):使用func遍历Array中的所有元素,返回一个数组
  • ...:数组解开成多个元素,等效Python中的*
  • (参数) => {函数内容}:Ts中的匿名数组

Verilator安装与基本使用

安装参考:Installation — Verilator 4.225 documentation

在Ubuntu上直接:apt-get install verilator即可

lint

使用--lint-only仅使用lint功能进行检查,如下所示:

verilator -Wall --lint-only test_add.v

test_add代码如下所示:

module test_add (
    input clk,
    input rst_n,

    input din_vld,
    input [7:0]din_dt_a,
    input [8:0]din_dt_b, // 位宽不匹配

    output reg dout_vld,
    output reg [7:0] dout_dt
);

always @ (posedge clk or negedge rst_n)
    if(~rst_n)
        dout_vld <= 1'b0;
    else
        dout_vld <= din_vld;

always @ (posedge clk or negedge rst_n) begin
    if(~rst_n) begin
        dout_dt <= 8'd0;
    end else if(din_vld) begin
        dout_dt <= din_dt_a + din_dt_b; // 位宽不匹配
    end
end
    
endmodule

运行后报错为:

%Warning-WIDTH: test_add.v:23: Operator ASSIGNDLY expects 8 bits on the Assign RHS, but Assign RHS's ADD generates 9 bits.
                             : ... In instance test_add
        dout_dt <= din_dt_a + din_dt_b;
                ^~
                ... Use "/* verilator lint_off WIDTH */" and lint_on around source to disable this message.
%Error: Exiting due to 1 warning(s)

另外可以添加-xml-only生成xml文件